php pdo bind_param error

0

Я столкнулся с ошибкой со вставкой в таблицу

JSON:

{"machine":"1","postage":"1","tracking":"1","lve":"1","notice":"4","content":"12","refresh":"1","location":"cityname"}

Как я могу это сделать?

спасибо

EDIT исправил ошибки, о которых вы, ребята, упомянули

function addOptions ($postData, $dbh) {

//print_r($postData);
$result = json_decode($postData);
//$location = $result->location;
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO options (location, display_time ,content_time, refresh_time, machine_data, postage_data, tracking_data, lve_data) 
                    VALUES (:location, :display_time, :content_time, :refresh_time, :machine_data, :postage_data, :tracking_data, :lve_data) 
                    ON DUPLICATE KEY UPDATE 
                    display_time= :display_time, refresh_time= :refresh_time, machine_data= :machine_data, content_time= :content_time, postage_data= :postage_data, tracking_data= :tracking_data, lve_data= :lve_data";
$preparedStatement = $dbh->prepare($sql);
$preparedStatement->bindParam(':location', $result->location);
$preparedStatement->bindParam(':display_time', $result->display);
$preparedStatement->bindParam(':content_time', $result->content);
$preparedStatement->bindParam(':refresh_time', $result->refresh);
$preparedStatement->bindParam(':machine_data', $result->machine);
$preparedStatement->bindParam(':postage_data', $result->postage);
$preparedStatement->bindParam(':tracking_data', $result->tracking);
$preparedStatement->bindParam(':lve_data', $result->lve);
$preparedStatement->execute();

}

теперь я получаю эту ошибку msg

Предупреждение: PDOStatement :: execute() ожидает, что параметр 1 будет массивом, строка, указанная в D:\xampp\htdocs\admin\include\function.php в строке 186

  • 0
    Похоже, вы просто забыли вызвать $preparedStatement = $dbh->prepare($sql);
  • 2
    Это не полностью объясняет, почему он жалуется на логическое значение вместо необъектной или неопределенной переменной. Есть ли еще код, который вы не показали?
Показать ещё 10 комментариев
Теги:
pdo

2 ответа

2
Лучший ответ

Вы забыли создать свой подготовленный оператор, попробуйте это, прежде чем связывать параметры:

$preparedStatement = $dbh->prepare($sql);

РЕДАКТИРОВАТЬ:

Просто измените это:

(Поскольку вы уже привязываете параметры, вы можете просто выполнить запрос! В противном случае параметр для выполнения будет включать параметры для подготовленного оператора)

$preparedStatement->execute($sql);

к этому:

$preparedStatement->execute();

Для получения дополнительной информации о команде PDO execute() см. Руководство: http://php.net/manual/en/pdostatement.execute.php

И цитата оттуда:

public bool PDOStatement :: execute ([array $ input_parameters])

  • 0
    Здесь происходит больше, чем опубликовал ФП. Должно быть, потому что переменная даже не будет определена, а синтаксис SQL INSERT запутан.
  • 0
    @MichaelBerkowski да, вы, вероятно, правы! (Просто прочитайте ваш комментарий о предложении WHERE, что очень странно)
1

Немногие ошибки:

  1. Добавьте команду pdo:

    $preparedStatement = $dbh->prepare($sql);
    
  2. измените все ваши bind_param на это:

    $preparedStatement->bindParam(':display', $result->display);
    
  3. добавьте выполнение в условие if, чтобы вы видели, если он сработал:

    if( $preparedStatement->execute() === FALSE){
    
       Throw new \Exception('Bad query insertion!');
    }
    

Ещё вопросы

Сообщество Overcoder
Наверх
Меню