Подготовленные отчеты PDO - NULL - PullRequest
8 голосов
/ 05 января 2011

У меня есть запрос на удаление, который я выполняю, но только что понял, что он не работает, когда $user_id равен нулю (что происходит в некоторых случаях).

$id = 1;
$user_id = null;
$delete = $sql->prepare("
    DELETE FROM
        `game_player`
    WHERE
        `id` = ?
    AND
        `user_id` = ?
");
if ($delete->execute(array(
    $id,
    $user_id,
));

Есть ли работакроме того, чтобы иметь разные запросы для значения, когда значение равно нулю, так как, по-видимому, единственный способ обеспечить правильную работу where - использовать user_id IS NULL вместо user_id = NULL ...

Ответы [ 2 ]

6 голосов
/ 05 января 2011
DELETE FROM
    `game_player`
WHERE
    `id` = ?
AND
    (`user_id` = ? OR ? IS NULL)

Будьте осторожны с круглыми скобками при смешивании и с или операторами.

Если $user_id на самом деле не php типа null, а, скажем, пустая строка, вы должны изменить приведенное выше так:

...
AND
    (`user_id` = ? OR ? = '')
0 голосов
/ 05 января 2011

Быстрое или утверждение решает проблему. Измените этот бит кода.

$delete = $sql->prepare(
    "DELETE_FROM 'game_player' where 'id'=? and 'user_id'=?;");
if ($delete->execute(array(
    $id,
    $user_id
));

В нечто более похожее на следующее.

$delete = $sql->prepare(
    "DELETE_FROM 'game_player' where ('id'=? and 'user_id'=?) 
                                  or ('id'=? AND 'user_id' IS NULL)");
if ($delete->execute(array(
    $id,
    $user_id,
    $id
))) { /* success */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...