2016-06-08 67 views
1

我想要盲我的MySql查詢我小白在這,我想阻止SQL注入我的查詢。這是我的發言,但有一個錯誤錯誤與mysql語句

$sql = $conn ->prepare("SELECT * FROM Personas WHERE concat(nombre1,' ',apellido1) LIKE '% :name %'"); 
    $sql-> bind_param('name', $q); 

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in

這項工作很好,但是這是一個不錯的方法

$sql="SELECT * FROM Personas WHERE concat(nombre1,' ',apellido1) LIKE '%".$q."%'; 

請幫我這個,我可以用什麼樣的方式來保護我的查詢在我的PHP代碼

謝謝所有,這是我的解決方案

$sql = $conn ->prepare('SELECT * FROM Personas WHERE concat(nombre1," ",apellido1) LIKE ? '); 
    $key = "%".$q."%"; 
    $sql-> bind_param('s', $key); 
+0

這條語句在phpmyadmin中工作正常SELECT * FROM Personas WHERE concat(nombre1,'',apellido1)LIKE'%jo%' – Heisenberg06

回答

0

使用bind_param這樣:

$sql= $conn->prepare("SELECT * FROM Personas WHERE concat(nombre1,' ',apellido1) LIKE :name"); 
$q= "%$q%"; 
$sql->bindParam(':name', $q); 
$sql->execute(); 
+0

現在我有這個錯誤致命錯誤:調用成員函數bind_param()這是編輯的代碼*** $ sql = $ conn - > prepare(「SELECT * FROM Personas WHERE concat(nombre1,'',apellido1)LIKE:name」); \t \t $ sql-> bind_param('name','%'。$ q。'%'); – Heisenberg06

+0

'$ sql-> bindParam(':name',$ q);'not bind_param – Thamilan

+0

shon致命錯誤:調用未定義方法mysqli_stmt :: bindParam() – Heisenberg06

0

mysql documentation使用問號,以指示後續bind_param值應放在(?)。嘗試用「?」替換「:name」在查詢中,您的bind_param應遵循語法bind_param(「s」,$ q),其中「s」是標識要綁定的值的類型的字符串:s表示字符串,d表示小數,i表示整數等。