我有以下查询,当粘贴到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查询中包含冒号?
答案 0 :(得分:2)
太糟糕了,我无法删除此接受的答案。无论如何,这是一个经过编辑的答案:
我很确定这是在日期里弄乱了它。
我很确定不是。
但是,要确实确定,必须从PDO获得错误消息。
答案 1 :(得分: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,所以避免这样的问题。
答案 2 :(得分: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);
答案 3 :(得分:-1)
:xyz
是PDO中的命名参数。
这意味着如果您使用pdo->prepare("SELECT :fields FROM :table :where");
你可以statement->execute(array(":fields"=>$fields,":table"=>$table,":where"=>$where));