Php 保护我的zend_db_select insert语句

Php 保护我的zend_db_select insert语句,php,zend-framework,zend-db,zend-db-select,Php,Zend Framework,Zend Db,Zend Db Select,我使用zend_db_select类作为我的sql包装器。我想知道下面的insert语句是否安全。(是否提供防止sql注入的机制等) 我尝试在表中插入带有引号的行,但没有用\进行转义,是我太担心还是phpmyadmin自动删除了\以便于查看?困惑的我在某个地方读到zend_db_select为sql注入之类的东西提供服务 谢谢你的建议。谢谢是的,这是安全的。Zend DB使用,因此数组的每个值都会使用适当的机制自动转义 如果您查看数据库的内容(例如,使用phpMyAdmin之类的工具),您永远不

我使用zend_db_select类作为我的sql包装器。我想知道下面的insert语句是否安全。(是否提供防止sql注入的机制等)

我尝试在表中插入带有引号的行,但没有用\进行转义,是我太担心还是phpmyadmin自动删除了\以便于查看?困惑的我在某个地方读到zend_db_select为sql注入之类的东西提供服务


谢谢你的建议。谢谢

是的,这是安全的。Zend DB使用,因此数组的每个值都会使用适当的机制自动转义

如果您查看数据库的内容(例如,使用phpMyAdmin之类的工具),您永远不会在其中看到转义引号,这就是转义数据的要点。如果插入字符串
O'Reilly
,这就是数据库中的结果

<强>编辑< /强>:考虑此查询:

INSERT INTO users (name) VALUES ('John O'Reilly')
这将不起作用,并将给您一个SQL语法错误,因为SQL解析器将看到第二个
作为列值的结尾,然后在看到后面的字符时将阻塞。因此,您需要退出该引用:

INSERT INTO users (name) VALUES ('John O\'Reilly')

反斜杠告诉它将后面的撇号视为文字(即,不要将其视为列值的结尾)。反斜杠本身永远不会插入到数据库中,这是计算中的常见做法。

嗨,蒂姆!谢谢你的回复!不要理解为什么我们永远不会看到转义的引号,为什么这是重点?转义数据的要点是在数据库中看到字符串get\。e、 g我们输入了O'Reilly,如果字符串在数据库中显示为O'Reilly,我们如何知道该字符串已转义。。我对这一点感到困惑。我已经编辑了我的答案,以包括一个例子-希望这更清楚。oic!我刚刚意识到。。。所以sql注入只可能发生在带有where子句的select、delete和update语句中?insert不会发生这种情况吗?不,SQL注入可以发生在涉及用户inputhmm的任何查询上,所以SQL注入会发生在上面的insert语句中吗?它是如何保护的?
INSERT INTO users (name) VALUES ('John O\'Reilly')