0

假设您需要使用 values 插入到 db 行的表中$a, $b, $c,这些值可能是不安全的,表的名称作为常量存储在执行操作的类中。可以进行如下查询

$query = "INSERT INTO `" . self::TABLE . '` ' .
    "(a, b, c) VALUES (" .
    . intval(a) .
    ",'" . mysql_real_escape_string(b) . "'" .
    ",'" . mysql_real_escape_string(b) . "')";

问题来了:有没有更优雅的方式来创建查询?

4

4 回答 4

2

它被称为prepared statements,它存在于MySQLi(好)或PDO(更好)中。我将添加我在评论中为使用的人添加的常见内容mysql_*

mysql_*请停止使用古老的功能编写新代码。它们不再被维护并且社区已经开始了弃用过程。相反,您应该了解准备好的语句并使用 PDOMySQLi。如果你想学习,这里有一个相当不错的 PDO 相关教程

虽然可以在mysql_*函数中执行,但我强烈(真的是EPICLY)建议不要这样做。


在 PDO 中,您的代码如下所示:

$query = "INSERT INTO `" . self::TABLE . "` (a, b, c) VALUES (:a, :b, :c);";

$statement = $db_connection->prepare($query);

$statement->bindParam(":a", $a);
$statement->bindParam(":b", $b);
$statement->bindParam(":c", $c);

$statement->execute();
于 2012-05-12T12:30:58.943 回答
1

是的。您可以/必须使用 PDO 或 mysqli。顺便说一句,当您在不需要的数据库中插入整数时'

于 2012-05-12T12:29:35.303 回答
1

有 - 使用诸如DoctrinePropel之类的ORM ...几乎所有 PHP 框架都提供了 ORM,其中大多数基于Active Record模式

于 2012-05-12T12:30:11.720 回答
1

是的,有可能 唯一的事情是,对于intval中不安全值,您将获得值 1 和 E_NOTICE 级别错误。

于 2012-05-12T12:31:16.643 回答