2012-05-12 102 views
0

Supose,您需要插入到值为$a, $b, $c的db行表中,值可能是不安全的,表的名称存储在执行操作的类中为常量。有可能使查询如下php + mysql:创建查询

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

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

回答

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(); 
+0

'mysqli'扩展名包含'mysql_ *'函数吗? – Eugeny89

+0

@ Eugeny89:不,它为喜欢程序编码的人提供了'mysqli_ *'功能。阅读我在答案中的链接。 –

1

是的。您可以/必须使用PDO或mysqli。按照他们的方式,当你在数据库中插入整数时,你不需要'

1

有 - 使用ORMDoctrinePropel ...几乎任何PHP框架提供了一个ORM,大部分基础上,Active Record模式

+0

一个问题......为什么? –

1

是的,这是唯一可能的事情是,你会得到价值1和的不安全值的E_NOTICE级别的错误a in intval