2017-06-21 65 views
-2

這是我的代碼數據時,聲明不工作:如果將使用PHP PDO預處理語句

<?php 

$salary = 0; 

try { 


    // prepare sql and bind parameters 
    $stmt = $conn->prepare("INSERT INTO TABLE (firstname, salary) 
    VALUES (:firstname, :salary)"); 
    $stmt->bindParam(':firstname', $firstname); 
    $stmt->bindParam(':salary', $salary); 

    // insert a row 

    $firstname = "John"; 
    if ($respond["salary"] != 0) 
    $salary= $response["salary"]; 
    $stmt->execute(); 

    echo "New records created successfully"; 
    } 

?> 

這僅僅是所需的代碼。在完整的代碼中,我使用whileloop檢索5-10個JSON文件。

我得到$response["salary"] from a JSON file,但是如果JSON文件中的工資是空的,我把這個值設爲0.所以它不存儲以前的JSON文件的值。

但這裏所發生的是:

如果在JSON文件中的工資是空的,然後我給$工資變量0值。

因此,根據IF聲明,由於工資= 0,所以不必存儲工資值。但它仍然在數據庫中存儲0。如何解決它?

+0

你有一個錯字。它應該是'if($ response [「salary」])' – FMashiro

+0

您的IF將銷售存儲到綁定變量中,但執行語句始終執行(請參閱手冊:http://php.net/manual/de/control -structures.if.php) – nabuchodonossor

+0

沒關係@FMashiro – Josh

回答

0

我的假設是您在IF聲明中調用了錯誤的查詢。

這是我對此採取:

$salary = 0; 

$stmt = $this->conn->prepare("INSERT INTO `table` (`firstname`,`salary`) VALUES (?,?)"); 


if (!empty($response['salary']) && $response['salary'] != 0) 
{ 
    $salary = $response['salary']; 
    $stmt->execute([$firstname, $salary]); 

    echo 'New record created successfully'; 
} else { 
    echo 'error!'; 
} 

我唯一的其他建議是var_dump($respond),然後var_dump($response),看看哪一個你實際上應該叫...

+0

但是在你的代碼中$ stmt-> execute只會被執行,如果它們是薪水的值,並且在哪寫$ firstname的值? 所以,我需要使用多個$ stmt->執行? – Josh

+0

不,它不會?它指出,如果薪水不= 0,那麼執行firstname和工資插入查詢,否則,如果它= 0,則拋出'error' – Option