2015-01-31 79 views
0

我運行到錯誤使用insert into表PHP PDO bind_param錯誤

JSON:

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

我怎樣才能這是怎麼回事?

THX

編輯 固定的錯誤,你們提到

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(); 

} 

現在我得到這個錯誤味精

警告:PDOStatement對象::執行()預計參數1是數組,字符串給出D:\ xampp \ htdocs \ admin \ include \ function.php on line 186

+0

看起來像是你忘記打電話'$ preparedStatement時= $ dbh->準備($ SQL);' – 2015-01-31 20:21:11

+2

這並不能完全解釋爲什麼它抱怨一個布爾值,而不是一個非對象或未定義的變量。是否有更多的代碼沒有顯示? – 2015-01-31 20:22:18

+0

你在哪裏調用'prepareStatement'? – ethrbunny 2015-01-31 20:22:23

回答

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

這裏比OP發佈的還多。必須有,因爲該變量甚至不會被定義,並且SQL INSERT語法會被混淆。 – 2015-01-31 20:24:59

+0

@MichaelBerkowski是的,你可能是對的! (請閱讀您對WH​​ERE子句的評論,這很奇怪) – Rizier123 2015-01-31 20:25:55

1

幾個錯誤:

  1. 添加PDO準備:

    $preparedStatement = $dbh->prepare($sql); 
    
  2. 改變所有bind_param這樣:

    $preparedStatement->bindParam(':display', $result->display); 
    
  3. 添加執行進入一個如果條件,所以你看它是否工作:

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