我对数据库中的表有疑问。共有三栏,如下:
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/