php + mysql:创建查询

时间:2012-05-12 12:27:15

标签: php mysql

Supose,你需要插入值为$a, $b, $c的db行的表,值可能是不安全的,表的名称存储在执行操作的类中作为常量。可以按如下方式进行查询

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

这里有一个问题:是否有更优雅的方式来创建查询?

4 个答案:

答案 0 :(得分:2)

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

  

请停止使用古老的mysql_*函数编写新代码。   它们已不再维护,社区已经开始deprecation process。相反,你应该   了解准备好的陈述并使用其中之一   PDOMySQLi。如果你   关心学习,here is a quite good PDO-related tutorial

虽然可以在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();

答案 1 :(得分:1)

是的,确实如此。你可以/必须使用PDO或mysqli。当你在数据库中插入整数时,你不需要'

答案 2 :(得分:1)

有 - 使用ORM,例如DoctrinePropel ...实际上,任何PHP框架都提供ORM,其中大多数都基于Active Record模式< / p>

答案 3 :(得分:1)

是的,有可能唯一的一点是,你会在 intval 中为 a 的不安全值获得值1和E_NOTICE级别错误。