2011-03-25 35 views
0

我已經得到了下面的查詢,它在粘貼到SQL客戶端時工作得很好,但在通過PDO執行時無法正常工作。如何在準備好的語句中包含冒號?

INSERT INTO mdt_order (`id`,`reference`,`customer_id`,`order_datetime`) 
VALUES (NULL,'786d98e7','1960','2011-03-25 08:59:34') 

我敢肯定它的:的在被搞亂它的日期。 order_datetime字段實際上設置爲2011-03-25 08??

如何在我的PDO查詢中包含冒號?

+1

什麼是你的PHP樣子? – sarnold 2011-03-25 09:06:40

回答

2

太糟糕了,我無法刪除此接受的答案。無論如何,這裏是一個編輯答案:

我很確定這是:在日期是搞砸了。

我很確定它不是。

然而,要確實肯定的是,一個必須從PDO有錯誤信息

2

我從來沒有見過這種行爲。 PDO忽略包含在SQL字符串引號中的語法':xyz'。儘管如此,你可能有一個錯誤版本。

但無論如何,如果你使用的預處理語句,那麼你真的應該無論如何使用綁定參數:

$pdo->prepare("INSERT INTO mdt_order (`id`,`reference`,`customer_id`,`order_datetime`) VALUES (?,?,?,?)") 
    ->execute(array(NULL, '786d98e7', '1960', '2011-03-25 08:59:34')); 

如果你想使用原始字符串保持,然後用->query()代替。這甚至不會嘗試尋找:params,所以要避免這樣的問題。

-1

:xyz在PDO中被命名爲參數。

這意味着如果你使用pdo->prepare("SELECT :fields FROM :table :where");

您可以statement->execute(array(":fields"=>$fields,":table"=>$table,":where"=>$where));

+1

沒有,他們不能 – 2013-07-23 12:38:10

0
$query = " 
    INSERT INTO 
     mdt_order (`id`, `reference`, `customer_id`, `order_datetime`) 
    VALUES 
     (NULL, :reference, :customer_id, :order_datetime)"; 

$db = new PDO("mssql:host=sqlserver;dbname=database", "username", "password"); 

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

$parameters = array(
    ":reference" => $reference, 
    ":customer_id" => $customer_id, 
    ":order_datetime" => $order_datetime 
); 

$statement->execute($parameters); 
+0

有人正在提出所有這些無關緊要的答案。有趣。 – 2013-08-02 23:11:49