php - SQL 未正确返回表中存在的行

标签 php mysql database pdo

我对数据库中的表有疑问。共有三栏,如下:

Name (VARCHAR(25))
QText (TEXT)
AText (TEXT)

我的查询通过 PDO 运行为:

SELECT `AText` FROM `Exam_QA_Data` WHERE `Name` = '$name' AND `QText` = '$question'

处理后,它看起来像这样,显然 $question 变量的长度将会改变:

SELECT `AText` FROM `Exam_QA_Data` WHERE `Name` = 'ExamServerTestExam' AND `QText` = 'This is the first question'

据我所知,根据替换 $question 的字符串长度,有时它会返回一行,有时它不会返回任何内容。

如果字符串很短(27 个字符),则返回该行的 'AText' 内容,但如果字符串很长(106 个字符),则不会返回任何内容 $question 是一个长字符串。我检查了数据库中的条目,发现整个字符串都存在,因此该行与正在搜索的行完全一样。

我也尝试过使用:

SELECT `AText` FROM `Exam_QA_Data` WHERE `Name` = '$name' AND `QText` LIKE '%$question%'

无法理解这是否是数据库问题,如果是,为什么?看来是输入字符串的长度有问题。

非常感谢。

最佳答案

所以经过一些测试,我发现搜索不喜欢超过 80 个字符长的字符串。为了做到这一点,但仍然得到相同的结果,我输入带有通配符的字符串,如以下代码块所示:

function grab_ans_given_ques($conn, $question, $examName){

    // Split the string here into two parts and join with a wildcard (%)
    $ques = substr($question, 0, 20)."%".substr($question, -20, strlen($question));
    $sql  = $conn->prepare("SELECT `AText` FROM `Exam_QA_Data` WHERE `Name` = '$examName' AND `QText` LIKE '%$ques%'");
    $sql->execute();

感谢所有提供建议或尝试提供帮助的人!

关于php - SQL 未正确返回表中存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777298/

相关文章:

javascript - 在获取 <td> 值方面需要帮助

mysql - 需要 SQL select 语句进行分页

sql-server - 在 VB.Net 中将 Datagrid 数据保存到 SQL Server 数据库

android - 如何为Android创建数据库应用程序?

php - 使用 MySQL 查询返回多个数据

php - 链接到 css 文件 PHP 的多个文件夹

php - __autoload 与包含家庭

MySQL 和 PDO : about efficiency

php - 使用 if/else 选择 php 输出源

php - 获取某个日期范围内的所有表格