mysql - ZF2 清理数据库查询的变量

标签 mysql zend-framework2 sanitization

在 Zend Framework 2 中进行数据库查询时,我应该如何清理用户提交的值?比如下面SQL中的$id

$this->tableGateway->adapter->query(
  "UPDATE comments SET spam_votes = spam_votes + 1 WHERE comment_id = '$id'",
  \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE
);

最佳答案

执行的时候可以传参数..

 $statement = $this->getAdapter()->query("Select * from test WHERE id = ?");
 $result = $statement->execute(array(99));

 $resultSet = new ResultSet;
 $resultSet->initialize($result);

您也可以将它们直接传递给查询方法

 $statement = $this->getAdapter()->query(
    "Select * from test WHERE id = ?", 
    array(99)
 );
 $result = $statement->execute();

 $resultSet = new ResultSet;
 $resultSet->initialize($result);

两者都会产生查询“Select * from test WHERE id = '99'”

如果你想使用命名参数:

$statement = $this->getAdapter()->query("Select * from test WHERE id = :id");
$result = $statement->execute(array(
    ':id' => 99
));

$resultSet = new ResultSet;
$resultSet->initialize($result);

如果你想引用你的表/字段名称等:

$tablename = $adapter->platform->quoteIdentifier('tablename');

$statement = $this->getAdapter()->query("Select * from {$tablename} WHERE id = :id");
$result = $statement->execute(array(
    ':id' => 99
));

关于mysql - ZF2 清理数据库查询的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15274354/

相关文章:

php - mysqli_stmt 无法转换为字符串

zend-framework2 - Zend Navigation、ACL 和 Partials

C#:使用 XmlTextWriter 清理 XML 文本值?

php - ZEND - 如何让它在共享主机上运行?

zend-framework2 - ZF2 的 Zend_Tool 有新版本吗?

php - 有效的SQL注入(inject)防护功能

django - 使用漂白剂清理 Django 中的所有表单输入字段

mysql - 在 mysql 数据库中存储图像的最佳方式是什么

Mysql第三表关系SELECT

mysql - DBD:无法使用 MySql DB 使用 HTTP 基本身份验证加载驱动程序文件 apr_dbd_mysql.so