我希望有一个通用的PHP函数,它根据函数的参数构建一个mysql查询。由于它是通用的,查询有时可能会要求id = 123或name ='Bob'。我测试了一些带有数字引号的查询,甚至是像WHERE id > '50' + 7
这样的东西,但它确实有效,但我怀疑这不会给你带来麻烦。我想如果这真的是一个通用函数,它应该能够处理日期和其他任何数据类型。那么什么是安全地形成这些查询的最佳方式呢?
答案 0 :(得分:5)
只要您的查询符合mySQL,任何类型的值都可以使用引号。处理值的方式取决于与之比较的字段类型。如有必要,它们将自动转换。
另外,您可能希望查看提供预编译语句的数据库包装器,如PDO。除了其他优点外,他们还将负责报价 - 以及传入数据的转发 - 本身。
来自manual:
的示例<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindValue(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
$sth->execute();
?>
答案 1 :(得分:1)
没有引号对任何数据类型都没有损害。因为,mysql引擎会将其转换为相应列的数据类型。
答案 2 :(得分:1)
mysql插入中的空引号就像它们被解释为字符串值一样。
如果您正在使用函数为mysql INT列生成插入并以
结束 IntColumn = ''
你可能会收到类型错误。
ERROR 1366:1366:不正确的整数值:第1行的'IntColumn'列'''
您需要过滤掉设置空值的INT列,或者使用不带引号的null而不是空引号。
IntColumn = null