php - 预准备语句中 mysqli select 语句中 LIKE/OR 运算符的问题

标签 php mysqli prepared-statement

我正在创建一个简单的 mysqli 准备语句,该语句根据搜索从数据库中选择记录。我想使用提交的相同搜索词搜索数据库表中的两个不同列,以查找标题或内容详细信息中的任何匹配项。我正在关注 Lynda.com 上的 David Powers 视频《使用面向对象的 PHP 访问数据库》,并根据我的需要调整该教程。我已经完成了大部分工作,但是当我在 sql 语句中添加第二个变量时,我遇到了问题。问题是它没有返回任何行。 。这是我的代码:

$sql = "SELECT id, heading, details, layout FROM content WHERE ( details LIKE ? OR heading LIKE ? )";
    $stmt = $db->stmt_init();
    if (!$stmt->prepare($sql)) {
        $error = $stmt->error;
    } else {
        $stmt->bind_param('s', $var1, $var2);
        $var1 = '%' . $_GET['searchterm'] . '%';
        $var2 = '%' . $_GET['searchterm'] . '%';

如果我删除 SQL 中第一个占位符之后的部分,并从 $stmt->bind_param('s', $var1, $var2); 中删除“$var2”;那么查询工作正常。例如,以下返回正确的结果:

    $sql = "SELECT id, heading, details, layout FROM content WHERE details LIKE ?";
    $stmt = $db->stmt_init();
    if (!$stmt->prepare($sql)) {
        $error = $stmt->error;
    } else {
        $stmt->bind_param('s', $var1);
        $var1 = '%' . $_GET['searchterm'] . '%';

添加第二个变量后,我没有返回任何结果。我也尝试过以下方法,但也返回 0 结果:

    $stmt->bind_param('s', $var1, $var1);
    $var1 = '%' . $_GET['searchterm'] . '%';

我对准备好的陈述是全新的,因此任何建议或指导将不胜感激。谢谢。

最佳答案

虽然我对参数绑定(bind)不太熟悉,但您不应该为每个参数指定一个类型,即

$stmt->bind_param('ss', $var1, $var2);

关于php - 预准备语句中 mysqli select 语句中 LIKE/OR 运算符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25936265/

相关文章:

php - Laravel 填充数组元素的验证规则

php - PHP 5.3.X 中的非确定性对象引用错误

php - WooCommerce Retina图像支持-不包含在srcset中

php - 将另一个表中的 InsertLastID 插入到新表中?使用 PDO 准备语句

java - 在 DBCP 中启用 PreparedStatement 池

php - stmt->get_result() 未完成

php - 显示mysql中的特定行

php - 当我在循环中添加一个额外的字段时,while 循环不起作用

php - fatal error : Call to a member function fetch_assoc() on a non-object

php - "×"字符打破 MySQL 记录