- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我需要将已经运行的查询更改为准备好的语句。我只是不知道如何正确使用 mysqli_stmt_bind_param(); 。我准备好的声明是...
$query = "SELECT users.user_id, users.first_name WHERE users.active IS NULL AND";
foreach ($terms as $term) { // add the search term..
$query .= " word=? OR"; // STUCK HERE
}
$query = substr($query, 0, -3); // remove last OR.
$query .= " GROUP BY users.user_id ORDER BY users.first_name DESC";
$stmt = mysqli_prepare($dbc, $query);
mysqli_stmt_bind_param($stmt, 's', $term); // STUCK HERE
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt, $user_id, $first_name);
mysqli_stmt_fetch($stmt);`
请任何帮助都会很棒,谢谢。
最佳答案
我建议更改您的 $query
构建:
$query = "SELECT users.user_id, users.first_name WHERE users.active IS NULL AND (";
foreach ($terms as $term) {
$query .= "word=? OR ";
}
$query = rtrim($query, " OR "); // remove last OR .
$query .= ") GROUP BY users.user_id ORDER BY users.first_name DESC";
$stmt = mysqli_prepare($dbc, $query);
我在这里做了一些更改,例如替换 substr()
与 rtrim()
(因为它的语法更短,并且更动态),固定间距,并将所有 word=?
和括号内。
至于您的实际参数绑定(bind),我建议更改它:
//use str_repeat to create a string of "s"'s equal to the amount of terms there are.
//use variable unpacking to unpack all of the terms into the function.
mysqli_stmt_bind_param($stmt, str_repeat("s", count($terms)), ...$terms);
更改包括使用 str_repeat()
这将生成一个由“s”组成的字符串,其长度与$terms
中的术语数量相同。我也用variable unpacking (在 PHP 5.6 版中添加)解压所有要绑定(bind)到查询的变量。
注意:如果您使用的PHP版本低于5.6,我建议您更新,但变量解包将不起作用。这是一种替代方法,只需将 mysqli_stmt_bind_param()
替换为:
call_user_func_array("mysqli_stmt_bind_param", array_merge(array($stmt, str_repeat("s", count($terms)), $terms));
这利用 call_user_func_array()
允许您解压变量。 PHP 5.6 版本中添加的变量打包基本上只是这个旧函数的糖语法。
关于php - mysqli_stmt_bind_param 用于搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48430010/
我正在尝试使用准备语句制作登录表单,但代码包含在我的sql中,字段中只有零,这是我的代码,谢谢您帮助我! $con=mysqli_connect('localhost','mupcku', '123'
您好,我需要将已经运行的查询更改为准备好的语句。我只是不知道如何正确使用 mysqli_stmt_bind_param(); 。我准备好的声明是... $query = "SELECT users.u
我试过这个功能,它有效: $stmt=mysqli_stmt_init($con); if (mysqli_stmt_prepare($stmt,"INSERT INTO `files
据我所知,mysqli_real_escape_string 不如准备好的语句安全,因此我正在进行切换。 然而,我在最简单的代码中遇到了一个小问题。 我期望执行的查询是 SELECT * from f
我正在尝试将数据插入我的 MySQL 数据库。我得到的只是一个空白页面,没有错误。 我的index.php: Username Password
使用prepared statements和mysqli_stmt_bind_param是否还有注入(inject)风险? 例如: $malicious_input = 'bob"; drop tab
我正在使用 mysqli_stmt_bind_param() 创建一个 INSERT 语句。出于某种原因,我收到一个错误。我使用 mysqli_error() 来查看错误消息,但它并不是特别有用。 有
这个问题已经有答案了: Mysqli throws "Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt,
我正在开发一个 php 应用程序,我尝试并成功使用带有该功能的 mysqli : function executeUpdateInsert($SQLStatement, $SQLBindString,
我有一个数据库表,其中包含一个无符号整数字段来存储访问者的 IP 地址: `user_ip` INT(10) UNSIGNED DEFAULT NULL, 这是试图存储 IP 地址的 PHP 代码片段
我正在尝试使用此方法将参数绑定(bind)到它们的特定类型: mysqli_stmt_bind_param(mysqli_stmt stmt, string types, mixed &var1 [,
我认为这是一个非常简单的查询: $qry="SELECT taglink, tagtitle, tagshow FROM taglist_main WHERE tag = ?"; if ($stmt
这个问题已经有答案了: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must be o
这是插入行的简单代码。它在 php 5.6 中运行良好,但在 php 7.0.9 中我得到错误:“参数 3 to mysqli_stmt_bind_param() expected to be a r
这个问题在这里已经有了答案: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must
我正在使用 codeigniter,下面的代码已经工作了很长时间,直到我的服务器更新到 PHP 5.4。我的要求是允许上传大型文件并将它们作为 blob 保存在 mysql 数据库中。我无法存储链接引
这个问题已经有答案了: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must be o
这个问题在这里已经有了答案: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must
我是一名优秀的程序员,十分优秀!