2016-06-08 66 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表示整数等。