繁体   English   中英

MySQL / PHP-用数字引号引起的查询中断?

[英]MySQL/PHP - Would putting quotes around numbers break any queries?

我想要一个通用的PHP函数,该函数根据函数的参数构建mysql查询。 由于它是通用的,因此查询有时可能会要求输入id = 123或name ='Bob'。 我测试了一些带有数字引号的查询,甚至是诸如WHERE id > '50' + 7 ,它都能正常工作,但是我怀疑这不会给以后带来麻烦。 我猜这是否真的是一个通用函数,它应该能够处理日期以及任何其他数据类型。 那么安全地形成这些查询的最佳方法是什么?

只要查询坚持使用mySQL,任何类型的值都可以使用引号引起来。 值的处理方式将取决于与其进行比较的字段的类型。 如有必要,它们将自动转换。

顺便说一句,您可能需要研究提供预准备语句(如PDO)的数据库包装器。 除了其他优点外,它们还将自己处理报价-以及转义输入数据。

手册中的示例:

<?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();
?>

mysql插入中的空引号的行为就像它们被解释为字符串值一样。

如果使用函数为mysql INT列生成插入并以

IntColumn = ''

您可能会遇到类型错误。

错误1366:1366:第1行的'IntColumn'列的整数值不正确''

您将要过滤掉设置为空值的INT列,或者将未加引号的null代替空引号。

IntColumn = null

没有引号不会损害任何数据类型。 因为,mysql引擎会将其转换为相应列的数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM