gpt4 book ai didi

php - 准备好的语句 LIKE 通配符

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

我创建了一个接受搜索列、搜索词和 ID 号的函数,并尝试构建准备好的语句并获取结果,并以 json 格式返回。

这是我的:

function searchBooks($searchColumn, $searchTerm, $teacherid) {
$books = array();

$link = connect_db();
$sql = "SELECT * FROM book WHERE teacher_id = ? AND ? LIKE ?";
$searchTerm = "%{$searchTerm}%";

$stmt = $link->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('iss', $teacherid, $searchColumn, $searchTerm);
$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_array(MYSQLI_BOTH)) {
$book = new Book();
$book->id = $row['id'];
$book->title = $row['title'];
$book->author = $row['author'];
$book->ar_quiz = $row['ar_quiz'];
$book->ar_quiz_pts = $row['ar_quiz_pts'];
$book->book_level = $row['book_level'];
$book->type = $row['type'];
$book->teacher_id = $row['teacher_id'];

array_push($books, $book);
}
mysqli_stmt_close($stmt);

return json_encode($books);
}

我正在使用一个测试页来传递我知道应该返回结果的值(使用“the”作为通配符,使用“title”作为搜索列):

echo searchBooks('title', 'the', 1);

...但我根本没有得到任何结果...[] 在测试页上输出。

假设 connect_db() 检索连接。假设我正在做我所有的错误检查和 Controller 级别的所有事情,并且可能会在以后添加类似的东西。现在只是想得到结果。提前感谢您提出的任何建议。

最佳答案

searchcolumn 不能是绑定(bind)变量。你不能绑定(bind)表/列名

$sql = sprintf("SELECT * FROM `book` WHERE teacher_id = ? AND `%s` LIKE ?", $searchColumn);
$searchTerm = "%{$searchTerm}%";

$stmt = $link->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('is', $teacherid, $searchTerm);

$searchColumn 列入白名单也是一个好主意,在执行此操作之前验证它确实是您的图书表中的一列

编辑

当您只使用数组中的关联值时,为什么还要费心使用 fetch_array(MYSQLI_BOTH)?使用 fetch_assoc() 会更好,或者你可以更聪明,使用 fetch_object() ,然后您就不需要按属性填充您的 Book 对象属性

考虑:

while ($book = $result->fetch_object('Book')) {
array_push($books, $book);
}

关于php - 准备好的语句 LIKE 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222081/

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