我有一个标准的文本输入字段。它从$_POST
得到它的值,我用它来构建一个SQL查询(ODBC,不仅仅是MySQL,如果这有所不同(或实例,我不能使用mysql_escape_string())。
我正在构建的查询在PHP上有单引号,在SQL上有双引号。例如:
$sql = 'SELECT * FROM ' . $table . ' WHERE field="' . $_POST['some_field'] . '"";
如果用户在他的输入中包含双引号,例如6" wrench
,我就会在不平衡字符串上出现SQL错误(单引号,如O'reilly
中没有问题)。
处理此问题的正确方法是什么?同样,我使用的是ODBC接口,而不是MySQL 。
这只是addslashes()
的问题吗?还是魔术报价?
更新: PHP手册中提到了魔术引号......
自PHP 5.3.0起,此功能已被弃用。非常不鼓励依赖此功能。
(并不是说他们提出了另一种选择;事实上,它也说魔法引用将在PHP 6中删除)
答案应该是使用准备好的陈述吗?
答案 0 :(得分:3)
使用PDO prepared statements。它supports ODBC
答案 1 :(得分:2)
使用odbc_prepare
和odbc_execute
之类的PDO
答案 2 :(得分:0)
更简单......为什么不使用htmlspecialchars?
http://us3.php.net/manual/en/function.htmlspecialchars.php
我的意思是,它更快,我假设你给用户一个允许他们使用引号的数据字段的原因是因为你打算在某个时候打印出那些数据。这仍然是可行的,您不必改变存储数据的位置。