- 此问题在此处已有答案**:
You have an error in your SQL syntax error?(2个答案)
5小时前关门了。
我在php中尝试使用预准备语句连接数据库,遇到了以下错误:
未捕获的mysqli_sql_异常:SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,以了解在C:\xampp\htdocs\Burza\includes\functions. inc. php:335中第3行"?OR users.class LIKE?OR www.example.com LIKE?"附近使用的正确语法:users.emailmysqli_query(对象(mysqli),'选择 * 从页面...')#1 C:\xampp\htdocs\Burza\buy.php(20):按搜索获取产品(对象(mysqli),' % summer %')#2 {main}抛出于C:\xampp\htdocs\Burza\包含\函数. inc.php中 mysqli_query(Object(mysqli), 'SELECT * FROM p...') #1 C:\xampp\htdocs\Burza\buy.php(20): getProductsBySearch(Object(mysqli), '%summer%') #2 {main} thrown in C:\xampp\htdocs\Burza\includes\functions.inc.php
我认为这是因为LIKE关键字,但我不知道该怎么办。所有表和行的名称都是正确的
我的代码如下所示:
function getProductsBySearch($conn, $search){
$sql = "SELECT * FROM products
JOIN users ON products.userid = users.id
WHERE users.name LIKE ? OR users.surname LIKE ? OR users.class LIKE ? OR users.email LIKE ?;";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
header("location: ../index.php?error=stmtfailed");
exit();
}
$search = "%".$search."%";
mysqli_stmt_bind_param($stmt, "ssss", $search, $search, $search, $search);// s = string
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$result = mysqli_query($conn, $sql);
$products = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_stmt_close($stmt);
return $products;
}
有人能给我解释一下为什么会发生这种情况以及如何解决吗?
我尝试将 * 符号更改为我的数据库中更具体的部分-www.example.com,但没有帮助。我尝试使用' %".?." %',但也没有效果。products.id and it didn't help. And I tried using '%".?."%' and it didn't work as well.
1条答案
按热度按时间t5zmwmid1#
这就是问题所在:
mysqli_query()
在查询没有查询参数时使用。如果查询有参数,则仅使用
mysqli_prepare()
和mysqli_stmt_execute()
。我建议采取以下顺序: