【发布时间】:2017-06-15 15:28:20
【问题描述】:
我正在尝试构建一个动态准备语句,以便我可以重用代码。在使用 LIKE 的准备状态下使用 %?% 时,我遇到了问题。我的代码如下:
$where = " First_Name LIKE '%?%' ";
$vals = array('Mike');
$type = 's';
$dbd = mysqli_stmt_init($dbconnection);
if (mysqli_stmt_prepare($dbd, "SELECT * FROM Contacts WHERE $where" )) {
mysqli_stmt_bind_param($dbd, $type, ...$vals);
if (!mysqli_stmt_execute($dbd)) {
echo "Execute Error: " . mysqli_error($dbconnection);
} else {
//do nothing
}
} else {
echo "Prep Error: " . mysqli_error($dbconnection);
}
mysqli_stmt_get_result($dbd);
所以当我使用“First_Name = ?”它工作正常,所以我认为我的问题与'%?%'有关。我已经搜索了解决方案,但找不到与我的动态准备语句相关的任何内容。感谢您的帮助。
【问题讨论】:
-
注意:
mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆。在您对程序风格投入过多之前,值得转换一下。 -
@tadman:你错过了
prepare()和bind_param()??? -
@AbraCadaver 是的,我想我这样做了,因为这是一种非常不寻常的绑定方式。很好的收获。
-
我对准备好的语句很陌生,所以感谢您的反馈。我在上面使用了 mysqli_stmt_prepare 和 mysqli_stmt_bind_param。这不正确吗?
-
PDO 手册的示例 6 将向您展示您失败的地方,php.net/manual/en/pdo.prepared-statements.php(我发现 mysqli 手册缺少很多信息)。简而言之,占位符需要独立存在。
标签: php mysql mysqli wildcard sql-like