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) . "')";
这里有一个问题:是否有更优雅的方式来创建查询?
答案 0 :(得分:2)
它被称为预备语句,它存在于MySQLi(好)或PDO(更好)中。我将添加我在评论中为使用mysql_*
的人添加的常见内容:
请停止使用古老的
mysql_*
函数编写新代码。 它们已不再维护,社区已经开始deprecation process。相反,你应该 了解准备好的陈述并使用其中之一 PDO或MySQLi。如果你 关心学习,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,例如Doctrine或Propel ...实际上,任何PHP框架都提供ORM,其中大多数都基于Active Record模式< / p>
答案 3 :(得分:1)
是的,有可能唯一的一点是,你会在 intval 中为 a 的不安全值获得值1和E_NOTICE级别错误。