2

在 mysql 数据库中插入一行时,字符串值需要用引号括起来,而整数不需要。

是否有任何类或库可以自动处理这个问题,以便我可以将字段名和值的数组传递给第 3 方函数,而不必担心将字符串值放在引号中?

谢谢,

4

3 回答 3

7

您需要担心的不仅仅是引用;您需要担心 SQL 注入。

对于新代码,使用PDO代替mysql_ormysqli_函数。在 PDO 中,使用准备好的语句(PDOStatement对象)。

使用准备好的语句,您永远不必用引号将内容括起来,它会阻止 SQL 注入。

于 2009-09-03T22:55:42.543 回答
3

如果您使用PDO,那么您无需担心类似的事情。

查看PDO::prepare以获取一些示例。

于 2009-09-03T22:54:55.103 回答
1

当我使用 drupal 时,默认行为db_query("SELECT col FROM tab WHERE id=%d",$id)会为您处理。

这类似于首先在查询中使用sprintfwith mysql_real_escape_string。您可以自己实现它,从他们显示的代码中,注意他们使用该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));
?>
于 2009-09-03T22:55:18.207 回答