PDO Неверный параметр num - PullRequest
0 голосов
/ 24 октября 2019

Я создал эту функцию для вставки данных в базу данных, и она делает это, но выдает предупреждение:

Недопустимый номер параметра: число связанных переменных не соответствует количеству токенов

код:

$first = (rand(1, 100));
$second = (rand(1, 100));
$last = $first + $second;
$stmt = $connection->prepare("
INSERT INTO equations (first_number, second_number, operation, result) 
VALUES (:first_number, :second_number, :operation, :result)
");

$stmt->bindParam(':first_number',$first, PDO::PARAM_INT);
$stmt->bindParam(':second_number',$second, PDO::PARAM_INT);

if ($last <= 100) {

    $stmt->bindParam(':result', $last, PDO::PARAM_INT);
    $stmt->bindValue(':operation', "+", PDO::PARAM_STR);

} else if ($first > $second) {

    $second_result = $first - $second;
    $stmt->bindParam(':result', $second_result, PDO::PARAM_INT);
    $stmt->bindValue(':operation', "-", PDO::PARAM_STR);
}
$stmt->execute();

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Если оба ваших условия не выполняются, у вас нет предложения else, поэтому в вашем утверждении отсутствуют 2 значения. Предполагая, что вы не хотите выполнять его, когда значения отсутствуют, я бы предложил переместить вызов execute внутри оператора if.

$first = (rand(1, 100));
$second = (rand(1, 100));
$last = $first + $second;
$stmt = $connection->prepare("
    INSERT INTO equations (first_number, second_number, operation, result) 
    VALUES (:first_number, :second_number, :operation, :result)
");

$stmt->bindParam(':first_number', $first, PDO::PARAM_INT);
$stmt->bindParam(':second_number', $second, PDO::PARAM_INT);

if ($last <= 100) {
    $stmt->bindParam(':result', $last, PDO::PARAM_INT);
    $stmt->bindValue(':operation', "+", PDO::PARAM_STR);

    $stmt->execute();
} elseif ($first > $second) {
    $second_result = $first - $second;
    $stmt->bindParam(':result', $second_result, PDO::PARAM_INT);
    $stmt->bindValue(':operation', "-", PDO::PARAM_STR);

    $stmt->execute();
}
0 голосов
/ 24 октября 2019

Ваше состояние не гарантирует, что все параметры связаны постоянно. Например:

$second=80; 
$first=70;

В этом случае :result и :operation не связаны, поскольку $last больше 100, а $first меньше $second. Я предлагаю отредактировать ваш код, чтобы охватить остальные условия:

if ($last <= 100) {
    $stmt->bindParam(':result', $last, PDO::PARAM_INT);
    $stmt->bindValue(':operation', "+", PDO::PARAM_STR);
} else if ($first > $second) {
    $second_result = $first - $second;
    $stmt->bindParam(':result', $second_result, PDO::PARAM_INT);
    $stmt->bindValue(':operation', "-", PDO::PARAM_STR);
} else {
    // this else will cover the rest
    $other_result = ... // do your magic here
    $stmt->bindParam(':result', $other_result, PDO::PARAM_INT);
    $stmt->bindValue(':operation', "other", PDO::PARAM_STR);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...