MySQL / PHP - 在数字上加引号会破坏任何查询吗?

时间:2010-07-22 10:49:29

标签: php mysql formatting types

我希望有一个通用的PHP函数,它根据函数的参数构建一个mysql查询。由于它是通用的,查询有时可能会要求id = 123或name ='Bob'。我测试了一些带有数字引号的查询,甚至是像WHERE id > '50' + 7这样的东西,但它确实有效,但我怀疑这不会给你带来麻烦。我想如果这真的是一个通用函数,它应该能够处理日期和其他任何数据类型。那么什么是安全地形成这些查询的最佳方式呢?

3 个答案:

答案 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