我看了一堆其他线程有相同的错误,但我的看起来有点不同。我已经检查过丢失的逗号和内容。
这是不起作用的原始代码:
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_cs
和dna
列使用排序dna_sample
因为我需要它们区分大小写。
答案 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));