php - PDO 查询不返回行

标签 php mysql pdo

下面的第一个代码就像一个魅力,我的数据库中“postclass”表和“tpost”表之间的唯一区别是名称。

$keyword = $_POST['keyword'];
$country = "Thailand";
    if($keyword === "English" || $keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ" || $keyword === "english"){
        if($keyword === "English" || $keyword === "english"){
            $sub_alt = "อังกฤษ";
        }
        if($keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ"){
            $sub_alt = "English";
        }
    }

    if(isset($sub_alt)){
        $sql="SELECT * FROM `tpost` WHERE `subject` LIKE :search OR `subject` LIKE :search2 AND `country` LIKE :country AND date >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY id DESC LIMIT 50";
    } else {
        $sql="SELECT * FROM `tpost` WHERE `country` LIKE :country AND `subject` LIKE :search AND date >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY id DESC LIMIT 50";
    }

    $stmt=$dbh->prepare($sql);
    $stmt->bindValue(':search','%'.$keyword.'%', PDO::PARAM_STR);

    if(isset($sub_alt)){
    $stmt->bindValue(':search2','%'.$sub_alt.'%', PDO::PARAM_STR);
    }

    $stmt->bindValue(':country','%'.$country.'%', PDO::PARAM_STR);
    $stmt->execute();


    if ($stmt->rowCount() > 0) {

    $result = $stmt->fetchAll();
    foreach( $result as $row){
    echo "WORKING";
    }

    } else { 
    echo "NO ROWS RETURNED";
    }

遗憾的是,下面这个应该做同样的事情,但它没有返回任何行。数据库中的表设置为InnoDB和UTF-8,并且结构相同。 $_POST['keyword'] 也发布了正确的数据。使用 Jquery $.post() 方法来发布。此脚本中的某些内容导致下面的脚本不返回行。在 Firefox 和 Chrome 上测试。大家有什么想法吗?

$keyword = $_POST['keyword'];
$country = "Thailand";
    if($keyword === "English" || $keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ" || $keyword === "english"){
        if($keyword === "English" || $keyword === "english"){
            $sub_alt = "อังกฤษ";
        }
        if($keyword === "อังกฤษ" || $keyword === "ภาษาอังกฤษ"){
            $sub_alt = "English";
        }
    }

    if(isset($sub_alt)){
        $sql="SELECT * FROM `postclass` WHERE `subject` LIKE :search OR `subject` LIKE :search2 AND `country` LIKE :country AND `date` >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY `id` DESC LIMIT 50";
    } else {
        $sql="SELECT * FROM `postclass` WHERE `country` LIKE :country AND `subject` LIKE :search AND `date` >= (DATE_SUB(CURDATE(), INTERVAL 150 DAY)) ORDER BY `id` DESC LIMIT 50";
    }

    $stmt=$dbh->prepare($sql);
    $stmt->bindValue(':search','%'.$keyword.'%', PDO::PARAM_STR);

    if(isset($sub_alt)){
    $stmt->bindValue(':search2','%'.$sub_alt.'%', PDO::PARAM_STR);
    }

    $stmt->bindValue(':country','%'.$country.'%', PDO::PARAM_STR);
    $stmt->execute();


    if ($stmt->rowCount() > 0) {

    $result = $stmt->fetchAll();
    foreach($result as $row) {
    echo "WORKING";
    }

    } else { 
    echo "NO ROWS RETURNED";
    }

最佳答案

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

将此添加到我的脚本中以检查错误,完全忘记了我对 PHP MYSQL 和 PDO 还很陌生......

尽管我必须强调通过将处理程序的 attr 设置为 ERRMODE 来检查错误的重要性...

该错误表明我的排序规则之间存在冲突,因为在 latin1_swedish_ci 上设置了一行,在转换为 utf8_unicode_ci 后,这些行现在在 SQL 中返回...有时,最简单的东西可能会让您措手不及...

关于php - PDO 查询不返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482761/

相关文章:

phpunit 抛出未捕获的异常'PHPUnit_Framework_Exception

php - Codeigniter num 行错误

mysql - SQL 连接 4 个表,仅从 2 个表中选择列

php - PHP、HTML 文件的编辑器内拼写检查

php - 数据库模式设计 : What to do about unverified invitations?

mysql - 如何在 MySQL Workbench 中编辑 View 而不自动为所用的表/ View 添加数据库名称前缀

mysql - 如何使用插入和选择语句

javascript - 使用 PDO 求两个不同表中两个值的总和

php - 为什么这个 while 循环中的表达式会导致无限循环?

php PDO类内部如何计算