Проблема передачи PDO :: PARAM_INT с использованием массива значений вставки - PullRequest
2 голосов
/ 06 июля 2011

У меня проблема с тем, что PDO инкапсулирует значения int с использованием кавычек и впоследствии делает запросы неуспешными.

Это код (с использованием функции-оболочки)

$newest = query("SELECT id, body, upvotes, downvotes 
                FROM suggestions ORDER BY timestamp DESC LIMIT :min, :max",
    array(
        ':min' => $min,
        ':max' => $max
    )
);

И этов результате неверный запрос, который вызывает ошибку (обратите внимание на кавычки вокруг значений LIMIT)

SELECT id, body, upvotes, downvotes FROM suggestions ORDER BY timestamp DESC LIMIT '0' , '50'

Я передаю массив значений:

array(
    ':min' => $min,
    ':max' => $max
)

Они обаINT, и из того, что я прочитал в Интернете, PDO должен автоматически это выяснить и использовать PDO::PARAM_INT при их привязке.Проблема в том, что он на самом деле этого не делает, и поскольку мой единственный способ передать их - через массив, я хотел бы спросить, есть ли способ заставить их быть PDO::PARAM_INT без необходимости использовать bindParam().

Заранее спасибо.

1 Ответ

1 голос
/ 06 июля 2011

Если вы используете обертку и не можете использовать bindParam, вы можете сделать:

$min=(int)$min;
$max=(int)$max;
query("SELECT id, body, upvotes, downvotes 
                FROM suggestions ORDER BY timestamp DESC LIMIT $min, $max");

Это не лучшая идея.Если вы хотите придерживаться стандартов, вам следует улучшить свою оболочку для обработки таких случаев.

Как добавить третий параметр в свою оболочку

function query($q,$paramArray,$bindParamArray) {}

Так что вы также можете эффективно использовать bindParam

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...