Php mysql中SQL查询的神秘失败

Php mysql中SQL查询的神秘失败,php,mysql,Php,Mysql,许多奇怪的mySQL查询失败困扰了我好几天。我没有找到原因,有人能建议我应该在哪里寻找解决方案吗?此SQL查询是一个特别简单的示例: SELECT * FROM `applicants` WHERE `first_name` LIKE "%Tim%" ORDER BY `date_created` DESC LIMIT 1 这会导致mySQL中出现语法错误,位置接近“%Tim%”。但是,复制/粘贴在phpmyadmin中工作。我已经做了十六进制检查,但看不到可能导致问题的不

许多奇怪的mySQL查询失败困扰了我好几天。我没有找到原因,有人能建议我应该在哪里寻找解决方案吗?此SQL查询是一个特别简单的示例:

SELECT * FROM `applicants` WHERE `first_name` LIKE "%Tim%" ORDER BY `date_created` DESC LIMIT 1
这会导致mySQL中出现语法错误,位置接近“%Tim%”。但是,复制/粘贴在phpmyadmin中工作。我已经做了十六进制检查,但看不到可能导致问题的不可见字符。相关代码行如下所示:

$sql = generateSql($metaData);
$stmt = $pdo->prepare($sql);
$stmt->execute();
在generateSql中:

$fields = ['', 'email', 'first_name', 'last_name', 'postcode', 'location'];
...
$field = $fields[$metaData['sfield']];
return 'SELECT * FROM `applicants` ' .
  'WHERE `' . $field . '` LIKE "%' . $metaData['stext'] . '%" ' .
  'ORDER BY `date_created` DESC LIMIT 1';
我还将SQL生成代码重新编写为一行,但没有任何区别


在同一函数中生成的其他查询不会导致错误(嗯,目前不是,它们不会)。请尝试避免双引号和类似字符串的字符串

SELECT * FROM `applicants` 
WHERE `first_name` LIKE concat('%','Tim', '%')
 ORDER BY `date_created` DESC LIMIT 1


下面的线程将修复它:如果我正在寻找'Bella',比方说,我不确定我是否希望返回'Arabella'。之所以使用双引号,是因为我将整个sql字符串括在单引号中。我在整个过程中都颠倒了引号,SQL调用工作正常。现在请给我解释一下它为什么有效!双引号用于列名称。。由于这个原因,字符串需要单引号。。你应该对sql代码字符串使用双引号,对内部字符串使用单引号。我想你只是在做这些东西up@Strawberry嗯,你想错了。有关更多详细信息,请参阅。虽然这肯定会导致错误,但测试显示的错误消息与问题中的错误消息不同-它识别语法,但抱怨该列不存在。这表明它至少有更多的功能,而不仅仅是
ANSI_QUOTES
模式。
SELECT * FROM `applicants` 
WHERE `first_name` LIKE '%Tim%'
 ORDER BY `date_created` DESC LIMIT 1