Как я могу передать функции MySQL в качестве параметров связывания в подготовленном операторе? - PullRequest
7 голосов
/ 09 февраля 2010

Я пытаюсь сделать это:

$sth = $dbi->prepare('INSERT INTO table VALUES (?, ?, ?)');
$sth->execute(
    $var1,
    $var2 || 'NOW()',
    $var3
);

без удачи. Есть идеи?

Ответы [ 3 ]

14 голосов
/ 09 февраля 2010
$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)');
$sth->execute(
    $var1,
    $var2,
    $var3
);
3 голосов
/ 09 февраля 2010

Функции не могут быть связаны параметрами. MySQL заключит их в кавычки, недопустимый синтаксис.

Ваши варианты:

  • DEFAULT CURRENT_TIMESTAMP - если поле является полем TIMESTAMP, вы можете объявить его по умолчанию для текущего времени, как это. Это не работает для полей DATETIME.
  • Использовать Perl - $now = time2str('%Y-%m-%d %T', time);
2 голосов
/ 02 марта 2010

Вы также можете использовать следующую кодировку.

$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)');
$sth->bind_param($var1,$var2,$var3); 
$sth1=$sth->execute;
...