【发布时间】:2010-11-25 11:19:06
【问题描述】:
在mysql数据库中插入一行时,字符串值需要用引号括起来,而整数不需要。
是否有任何类或库可以自动处理此问题,以便我可以将字段名和值的数组传递给第 3 方函数,而不必担心将字符串值放在引号中?
谢谢,
【问题讨论】:
在mysql数据库中插入一行时,字符串值需要用引号括起来,而整数不需要。
是否有任何类或库可以自动处理此问题,以便我可以将字段名和值的数组传递给第 3 方函数,而不必担心将字符串值放在引号中?
谢谢,
【问题讨论】:
您需要担心的不仅仅是引用;你需要担心 SQL 注入。
对于新代码,请使用 PDO 而不是 mysql_ 或 mysqli_ 函数。在 PDO 中,使用准备好的语句(PDOStatement 对象)。
使用准备好的语句,您无需将内容括在引号中,它会阻止 SQL 注入。
【讨论】:
如果你使用PDO,那么你就不用担心这样的事情了。
查看PDO::prepare 中的一些示例。
【讨论】:
当我使用 drupal 时,db_query("SELECT col FROM tab WHERE id=%d",$id) 的默认行为会为您处理。
这类似于首先在查询中使用sprintf 和mysql_real_escape_string。你可以自己实现它,从code they show,注意他们使用preg_replace_callback()方法,你可以点击它..
传统方式,如果忽略PDO(不推荐):
<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>
【讨论】: