-1

请看PHP代码:

$val = $_POST['name']; 
$stmt = $mysqli->stmt_init(); 
$stmt->prepare("SELECT id, name, email FROM some_table WHERE name LIKE ?%"); 
$stmt->bind_param('s', $val); 
$stmt->execute(); 

当我运行此查询时;我收到以下错误:警告:mysqli_stmt::bind_param(): invalid object or resource mysqli_stmt

这里有什么问题?

4

2 回答 2

0

问题是?应该在 SQL 表达式中保留作为占位符,或者 - 再次作为占位符,在 SQL 函数中使用。因此,您有两个选择:只需添加%到提供的值,如下所示:

$val = $_POST['name'] . '%';
$stmt->prepare("SELECT id, name, email FROM some_table 
  WHERE name LIKE ?"); 
$stmt->bind_param('s', $val); 

... 或保持原样,改为修改 SQL:

$stmt->prepare("SELECT id, name, email FROM some_table 
  WHERE name LIKE CONCAT(?, '%')"); 
$stmt->bind_param('s', $val); 
于 2013-09-29T17:35:09.517 回答
0

更改如下:

$val = $_POST['name'] . '%'; 
$stmt = $mysqli->stmt_init(); 
$stmt->prepare("SELECT id, name, email FROM some_table WHERE name LIKE ?"); 
$stmt->bind_param('s', $val);
$stmt->execute();

基本上,准备好的 stmt 应该仍然只有占位符“?”,而您的变量应该在末尾有通配符“%”

于 2013-09-29T17:36:14.217 回答