Constant FILTER_SANITIZE_STRING is deprecated hatası çözümü

FILTER_SANITIZE_STRING filtresi PHP 8.1 ve üstü sürümlerde kaldırıldı. Bunun yerine FILTER_SANITIZE_FULL_SPECIAL_CHARS filtresini kullanabilirsiniz.

Örnek Kullanım:

function sqlFilter($value ,$status = true)
{
	if ($status) {
		return filter_var($value, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
	} else {
		return $value;
	}
}

Xampp Php 7.4 x86 32bit VC15

 XAMPP for Windows 7.4.29 sürümü 64 bit olduğundan sizlere 32 bitlik sürümünü hazırladım.

  • Apache/2.4.38 (Win32) OpenSSL/1.1.1a PHP/7.4.29
  • Veritabanı istemcisi sürümü: libmysql – mysqlnd 7.4.29
  • PHP uzantısı: mysqli  curl  mbstring 
  • PHP sürümü: 7.4.29
  • Sunucu sürümü: 10.1.38-MariaDB – mariadb.org binary distribution
  • phpMyAdmin Sürüm bilgisi: 5.2.0
<?php //32bit
$whitelist = array('127.0.0.1','::1');
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
  $mysqli= @new mysqli("localhost","root","");
}
?>

Tıkla İndir 203MB

Phpmyadmin Güncellemesi İndir 13MB

Mysql Sıradaki Atlanmış Boş Otomatik Id Numaralarını Bulma

Bazen auto increment kullanırken aradan veriler silinebiliyor. Bu şekilde bir kullanım ile tekrar boş idleri doldurabilirsiniz

SELECT t1.id+1 AS siradaki FROM urun AS t1 WHERE 0=(SELECT COUNT(t2.id) FROM urun AS t2 WHERE t2.id=t1.id+1 order by t2.id asc) order by t1.id asc LIMIT 1

Yukarıdaki örnekte urun adlı tablodaki id sütununa göre arama yapar ve sıradaki boş id leri çağırır.

Örneğin 1,2,3,5,6 gibi bir veride 4 sonucunu verir.

SELECT t1.id+1 AS siradaki FROM urun AS t1 WHERE 0=(SELECT COUNT(t2.id) FROM urun AS t2 WHERE t2.id>=t1.id+1 and t2.id<=t1.id+21 order by t2.id asc) and t1.id>1000 order by t1.id asc LIMIT 1

Yukarıdaki örnekte urun adlı tablodaki id sütununa göre arama yapar,1000 nolu id’den büyük ve arada 20 adet ardışık boş id bulunan değerleri döndürür.

Örneğin 1025,1028,1030,1051 gibi bir veride 1031 sonucunu verir

Phpmyadmin Binary Veriyi Utf8 Görüntüleme

$result = bin2hex($content);
$result = pack('H*', $result);
$result = mb_convert_encoding($result, "UTF-8","ISO-8859-9");
$result = htmlspecialchars($result);

phpMyAdmin\libraries\classes\Display\Results.php içerisinde yaklaşık 5000.satırda handleNonPrintableContents fonksiyonu içerisindeki bin2hex fonksiyonunun olduğu satırı yukarıdaki şekilde değiştirin.

Mysql 1364 Field doesn’t have a default value hatası çözümü

Phpmyadmin güncellemesi ile birlikte bu hatayı alanlar uyarıda geçen tabloya tıkladıktan sonra Yapı menüsünden ilgili sütunu seçerek Yapı linkine tıklayın.

Varsayılan değeri yok olan AutoIncrement(id) hariç olan sütunları değiştir seçeneğine tıklayın

Varsayılan değer olarak NULL veya tanımlı bir değer girerek kaydedin.

Sql Sorgu Kontrol Sınıfı

<?php
class sqlKontrol{
	var $id_alan;
	var $id_deger;
	function sec($tablo,$alan,$deger){
		$sorgu="SELECT * FROM $tablo WHERE ";
		for($c=count($alan);$c>0;$c--) {
			$id=$c-1;
			$sorgu.=" ".$alan[$id]."='".$deger[$id]."' ";
			if($c-1!=0){
				$sorgu.=" AND ";
			}
		}
		return $sorgu;
	}
	function guncelle($tablo,$alan,$deger){
		$sorgu="UPDATE $tablo SET ";
		for($c=count($alan);$c>0;$c--) {
			$id=$c-1;
			$sorgu.=" ".$alan[$id]."='".$deger[$id]."' ";
			if($c-1!=0){
				$sorgu.=" , ";
			}
		}
		$sorgu.=" WHERE $this->id_alan = '$this->id_deger'";
		return $sorgu;
	}
	function ekle($tablo,$alan,$deger){
		$sorgu="INSERT INTO $tablo SET ";
		for($c=count($alan);$c>0;$c--) {
			$id=$c-1;
			$sorgu.=" ".$alan[$id]."='".$deger[$id]."' ";
			if($c-1!=0){
				$sorgu.=" , ";
			}
		}
		return $sorgu;
	}
	function sil($tablo,$alan,$deger){
		$sorgu="DELETE FROM $tablo WHERE ";
		for($c=count($alan);$c>0;$c--) {
			$id=$c-1;
			$sorgu.=" ".$alan[$id]."='".$deger[$id]."' ";
			if($c-1!=0){
				$sorgu.=" AND ";
			}
		}
		return $sorgu;
	}
} 
$data = new sqlKontrol;
echo $data->sec('table',['name1','name2'],['value1','value2']);
echo "<br>";
$data->id_alan="id";
$data->id_deger="1";
echo $data->guncelle('table',['name1','name2'],['value1','value2']);
echo "<br>";
echo $data->ekle('table',['name1','name2'],['value1','value2']);
echo "<br>";
echo $data->sil('table',['name1','name2'],['value1','value2']);
?>

Çıktısı

SELECT * FROM table WHERE name1='value1' 
SELECT * FROM table WHERE name2='value2' AND name1='value1' 
UPDATE table SET name2='value2' , name1='value1' WHERE id = '1'
INSERT INTO table SET name2='value2' , name1='value1' 
DELETE FROM table WHERE name2='value2' AND name1='value1'

 

Çift veya Birden Fazla Kayıtları Düzenleme, Silme

Böyle bir tablomuz olduğunu varsayalım

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ad` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

INSERT INTO `test` (`ad`) VALUES ('veli'),('ali'),('veli'),('ali'),('veli'),('ali');

Tekrar eden tüm verileri silmek için (Çiftten fazla var ise tercih edilir)
(Not:En son 1 tane bırakılır)

DELETE t1 FROM test t1, test t WHERE t1.id < t.id AND t1.ad = t.ad

Tekrar eden en son eklenen kaydı silme(Genelde çift kayıtlar için)(Son ekleneni silerek)
(Not:3 tane aynı veri var ise 2 tane kalır)
(Not:2 tane aynı veri var ise 1 tane kalır)
(Not:1 tane aynı veri var ise yine 1 tane kalır)
(Yani sürekli tekrarlanırsa 1’er 1’er silerek üstteki yaptığımız işleme ulaşılmış olur)

DELETE  
  FROM test 
    WHERE exists (  
      select * from  
        (select MAX(p.id) ciftid,count(*) 
          FROM test as p  
            GROUP BY p.ad 
              HAVING count(*)>1 
        ) as cift 
        WHERE cift.ciftid=test.id  
    )

Çıktısı

+------+
|  ad  |
+------+
| ali  |
| veli |
+------+

 

Veritabanına Dosya ile Veri Yüklemek

PDO ile

<?php 
$db = new PDO($dsn, $user, $password);

$sql = file_get_contents('file.sql');

$qr = $db->exec($sql);
?>

Komut ile

<?php
$command = "mysql -u{$vals['db_user']} -p{$vals['db_pass']} "
 . "-h {$vals['db_host']} -D {$vals['db_name']} < {$script_path}";

$output = shell_exec($command . '/shellexec.sql');
?>

Dosyayı okuyup parça sorgulatarak

<?php 
function run_sql_file($location){
    $commands = file_get_contents($location);
    $lines = explode("\n",$commands);
    $commands = '';
    foreach($lines as $line){
        $line = trim($line);
        if( $line && !startsWith($line,'--') ){
            $commands .= $line . "\n";
        }
    }
    $commands = explode(";", $commands);
    $total = $success = 0;
    foreach($commands as $command){
        if(trim($command)){
            $success += (@mysql_query($command)==false ? 0 : 1);
            $total += 1;
        }
    }
    return array(
        "success" => $success,
        "total" => $total
    );
}

function startsWith($haystack, $needle){
    $length = strlen($needle);
    return (substr($haystack, 0, $length) === $needle);
}
?>

 

Son Yapılan İşlemin Hangi Veritabanına Eklendiğini Kontrol Etme

Kendi ihtiyacımdan dolayı yazdım.Hazır scriptlerdeki karmaşık form kayıtlarının hangi veritabanına  eklediğini bulmak için geliştirdim.Umarım işinize yarar.

<?php 
/*#####################AYARLAR################################*/
$dbname = 'wp';//veritabanı adı
mysql_connect('localhost', 'root', 'mysql');//bağlantı bilgiler
/*############################################################*/

header('Content-Type: text/html; charset=utf-8');
date_default_timezone_set('Europe/Istanbul');
mysql_select_db($dbname);
$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query($sql);
$filename = 'DB.TXT';
if(@$_GET['delete']){
if(is_file($filename)) {
	unlink($filename);
}elseif(@$_GET['update']){
header("Location: index.php");
}else{header("Location: index.php");}
}
if (!file_exists($filename)) {
	$file = fopen($filename, 'w');
	while ($row = mysql_fetch_row($result)) {
		$r = mysql_fetch_array(mysql_query("SELECT count(*) as c FROM ".$row[0]));
		$total = $r["c"];
		fwrite($file, $row[0]."(".$total.")" . "n");
	}
	fclose($file);
	header("Location: index.php");
}else{
$fp = @fopen($filename, 'r'); 
if ($fp) {
   $array = explode("n", fread($fp, filesize($filename)));
}
	$i=-1;
	echo '<table border=1>
	<tr><th colspan=2>'.$filename.' - '.date("d.m.Y H:i:s",filemtime($filename)).'</th></tr>
	<tr><th colspan=2>
	<button onclick="javascript:location.href='index.php?update=ok'">Veritabanı Güncelle</button>
	<button onclick="javascript:location.href='index.php?delete=ok'">DB.TXT Güncelle</button>
	<tr><th>CANLI VERİTABANI</th><th>KAYITLI DOSYA YEDEĞİ</th></tr>';
	while ($row = mysql_fetch_row($result)) {
		$i++;
		$r = mysql_fetch_array(mysql_query("SELECT count(*) as c FROM ".$row[0]));
		$total = $r["c"];
		echo "<tr>";
		echo "<td>";
		echo $row[0]."(".$total.")";
		echo "</td><td>";
		echo $array[$i];
		echo "</td>";
		echo "</tr>";
	}
	echo "</table>";
}
?>