2011-03-25 39 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