php pdo: prepare () негативы становятся позитивными - PullRequest
0 голосов
/ 28 ноября 2011

Я использую подготовленный оператор для вставки значений из формы в БД, и некоторые значения являются отрицательными.

# html
<input type="radio" name="opinion" value='-2' />
<input type="radio" name="opinion" value='-1' />
<input type="radio" name="opinion" value='0' />
<input type="radio" name="opinion" value='1' />
<input type="radio" name="opinion" value='2' />

# prepare
prepare("UPDATE $db.$dbt SET $question = :value WHERE `key` = :key;");

Действия по устранению неполадок уже предприняты :
• Я повторил POST ed значения из формы, и отрицательные значения возвращают отрицательные значения.
• Я скопировал оператор в prepare() в CLI и вручную вставил отрицательное значение в тот же столбец, где prepare вставляет положительное значение:
UPDATE db.dbt SET opinion = '-1' WHERE key = '10101'; (отметки присутствуют в реальном SQL)
^ Это сработало.
• Я распечатал подготовленные операторы по мере их выполнения и заметил, что значения не заключены в кавычки. Я думаю, что отсюда проблема .

Я прочитал, что значения не должны заключаться в кавычки в prepare(), поэтому я не могу думать ни о чем другом ...

РЕДАКТИРОВАТЬ: prepare() находится внутри цикла

foreach ( $pairs as $pair ) {
    list($question , $answer) = explode('=', $pair);
    try {
        $record_data = $dbh->prepare("UPDATE $db.$dbt SET $question = :value WHERE `key` = :key;");
        $record_data->bindParam(':value', $answer);
        $record_data->bindParam(':key', $key);
        $record_data->execute();
    } catch(PDOException $e){};
} // end foreach

1 Ответ

2 голосов
/ 28 ноября 2011

Если вы используете PDO: -

$sth->bindParam(':value', $opinion, PDO::PARAM_INT);

Тип данных по умолчанию для bindParam: PDO::PARAM_STR

...