2017-06-21 60 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