2014-08-29 57 views
0

我收到准备语句为什么在绑定中导致错误的参数数量?

mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters 

警告

从下面的语句:

mysqli_stmt_bind_param($stmt, "ss", $str_addr_no, $str_addr);

我环顾四周,为where ... like的例子,并不能看到什么是错我的语法。

$link = mysqli_connect("localhost","fred","password","h2o_amr"); 

$str_addr_no = $_REQUEST['meter_street_number']; 
$str_addr = $_REQUEST['meter_street_address']; 

$stmt = mysqli_stmt_init($link); 
mysqli_stmt_prepare($stmt, "select w.* from water w where w.mtr_addr_no like '?%' and w.mtr_addr_str like '?%' ")) 

mysqli_stmt_bind_param($stmt, "ss", $str_addr_no, $str_addr); 

有没有办法让PHP显示或检查准备好的语句,看看有多少参数实际上准备好了?

回答

4

您引用了占位符:'?%',它将它们转换为字符串,而不是占位符。占位符必须是裸?字符:

SELECT ... WHERE foo = ? // OK 
SELECT ... WHERE Foo = '?' // no parameters here, just a string 

对于一个通配符LIKE查询,你不得不求助于黑客:

SELECT ... WHERE foo LIKE CONCAT('%', ?) 
+0

取而代之的是黑客可以在PHP代码串连了'%' 。 – Barmar 2014-08-29 16:22:24

相关问题