gpt4 book ai didi

php - mysqli_stmt_bind_param 用于搜索

转载 作者:行者123 更新时间:2023-11-29 10:25:17 25 4
gpt4 key购买 nike

您好,我需要将已经运行的查询更改为准备好的语句。我只是不知道如何正确使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com