如何在准备好的语句中包含冒号?
我已经得到了下面的查询,它在粘贴到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查询中包含冒号?
太糟糕了,我无法删除此接受的答案。无论如何,这里是一个编辑答案:
我很确定这是:在日期是搞砸了。
我很确定它不是。
然而,要确实肯定的是,一个必须从PDO有错误信息。
我从来没有见过这种行为。 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,所以要避免这样的问题。
:xyz
在PDO中被命名为参数。
这意味着如果你使用pdo->prepare("SELECT :fields FROM :table :where");
您可以statement->execute(array(":fields"=>$fields,":table"=>$table,":where"=>$where));
没有,他们不能 – 2013-07-23 12:38:10
$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);
有人正在提出所有这些无关紧要的答案。有趣。 – 2013-08-02 23:11:49
什么是你的PHP样子? – sarnold 2011-03-25 09:06:40