2012-05-12 99 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