Hazır açıklamada joker karakterler kullanarak - MySQLi

5 Cevap php

Ben aşağıdaki sorguyu çalıştırmak için çalışıyorum, ve ben joker ile sorun yaşıyorum.

   function getStudents() {
    	global $db;
    	$users = array();
    	$query = $db->prepare("SELECT id, adminRights FROM users WHERE classes LIKE ? && adminRights='student'");
    	$query->bind_param('s', '%' . $this->className . '%');
    	$query->execute();
    	$query->bind_result($uid, $adminRights);
    	while ($query->fetch()) {
    		if (isset($adminRights[$this->className]) && $adminRights[$this->className] == 'student')
    			$users[] = $uid;
    	}
    	$query->close();
    	return $users;
    }

Referans ile parametre 2 geçmek olamaz: Ben bildiren bir hata alıyorum. Sütunun veri tefrika dizileri içerdiğinden ben joker kullanmak gerekir nedeni budur. Sanırım, bu işlemek için daha kolay bir yolu varsa, ben ne yapabilirdim?

Şimdiden teşekkürler!

5 Cevap

Eğer bir single variable (bir zincirleme dize) geçmek zorunda anlamına gelir, referans bind_param() parametreleri geçmek zorunda. Eğer olsa, geçmek için özellikle böyle bir değişken oluşturmak olamaz hiçbir neden yok:

$className = '%' . $this->className . '%';
$query->bind_param('s', $className);

Parametre # 2 referans değil, bir değer olmalıdır. Denemek

$param = '%' . $this->className . '%';
$query->bind_param('s', $param);

Bunu yapmanın bir yolu:

SELECT id, adminRights FROM users 
  WHERE classes LIKE CONCAT("%", ?, "%") && adminRights='student'

Eğer dinamik bir sonuç bağlaması var ve sadece SQL sorgusu değiştirmek istediğiniz durumda bu kullanışlı ...

Bu C + + olur aynı nedenidir. Eğer argüman bir referans olmasını beklediği bir işleve bir değer geçmek zaman, (geçici) bir değişken gerekir. Bu yüzden ilk bir değişken oluşturun ve sonra onu geçmek.

Varolan cevaplar yüzden bu ben yerine kullanılan budur benim için işe yaramadı:

 $sql = mysql_query("SELECT * FROM `products` WHERE `product_title` LIKE '$userInput%'") or die(mysq_error());

Ve her zaman çalışır.

ve sadece ben sadece basit formunu denedim her top ve o amele için

$sql = "SELECT * FROM `products` WHERE `product_title` LIKE '%".$userInput."%'";

Bu yardımcı olur umarım