无法运行查询:SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2014-08-31 01:48:35

标签: mysql sql

我看了一堆其他线程有相同的错误,但我的看起来有点不同。我已经检查过丢失的逗号和内容。

这是不起作用的原始代码:

SELECT `color_name`, `dna_sample` FROM `horse_color_base` WHERE `dna_sample` = $dna 

但是,如果您将$dna更改为"eeee aaaa"$dna的值是什么),则效果非常好。

SELECT `color_name`, `dna_sample` FROM `horse_color_base` WHERE `dna_sample` = 'eeee aaaa'

验证错误显示为:

  

无法运行查询:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中出错;检查与您的MySQL服务器版本相对应的手册,以获得在' aaaa'附近使用的正确语法。在第1行

似乎它破坏了$ dna变量,这一切都搞砸了。

关于如何使这个东西与变量一起工作的想法或想法?

我对latin1_general_csdna列使用排序dna_sample因为我需要它们区分大小写。

1 个答案:

答案 0 :(得分:1)

像Michael Berkowski的评论一样,引用变量:

WHERE `dna_sample` = '$dna'

以这种方式编写查询对SQL injection开放。编写带有绑定参数的查询几乎总是更好:

$stmt = $pdo->prepare('SELECT * FROM horse_color_base WHERE dna_sample = :dna');
$stmt->execute(array('dna' => $dna));