Как включить двоеточие в подготовленное утверждение? - PullRequest
0 голосов
/ 25 марта 2011

У меня есть следующий запрос, который прекрасно работает при вставке в клиент 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?

Ответы [ 4 ]

2 голосов
/ 25 марта 2011

Я никогда не видел такого поведения.PDO игнорирует синтаксис ':xyz', заключенный в строковые кавычки SQL.У вас может быть ошибочная версия.

Но в любом случае, если вы используете подготовленные операторы, то вам действительно следует использовать связанные параметры:необработанные строки, затем используйте ->query().Это никогда даже не попытается найти: params, поэтому избегайте таких проблем.

2 голосов
/ 25 марта 2011

Жаль, что я не могу удалить этот принятый ответ.В любом случае, вот отредактированный ответ:

Я почти уверен, что это дата в дате, которая его испортила.

Я почти уверен, что этоэто не.

Однако, чтобы быть действительно верным, нужно иметь сообщение об ошибке от PDO.

0 голосов
/ 03 августа 2013
$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 голосов
/ 23 июля 2013

:xyz является именованным параметром в PDO.

Это означает, что если вы используете pdo->prepare("SELECT :fields FROM :table :where");

Вы можете statement->execute(array(":fields"=>$fields,":table"=>$table,":where"=>$where));

...