PHP获取JSON&通过PDO插入DB

时间:2017-02-25 05:23:26

标签: mysql json pdo

我的PHP代码:

<?php
$host = ""; $db_name = ""; $username = ""; $password = "";

try {
    $conn = new PDO("mysql:host=".$host.";dbname=".$db_name, $username, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$json = file_get_contents('');
$obj = json_decode($json, TRUE);

$stmt = $conn->prepare("INSERT INTO item_details (item_id,value,circulation) VALUES (:item_id,:value,:circulation");

foreach($obj['items'] as $key => $index) {
    $item_id = $key;
    $value = $index['value'];
    $circulation = $index['circulation'];

    $stmt->bindparam(":item_id", $item_id);
    $stmt->bindparam(":value", $value);
    $stmt->bindparam(":circulation", $circulation); 
    $stmt->execute();
}
?>

问题:

我已经通过将数据回显到我的循环中的页面进行测试,并且正在检索数据,但是没有信息提交到我的数据库。

问题:

  1. 如何改进我的脚本以添加相关的调试行 找到原因?
  2. 为什么我的脚本无效?如果是这样,请你解释一下,但是我的上述问题将有助于我未来发展的学习曲线!

2 个答案:

答案 0 :(得分:1)

Catalin Minovici对于bindParam是正确的,但是PDO错误并不总是抛出可以捕获的异常,因此如果要检查PDO错误并抛出自己的异常,则try / catch仅对此有用。

您的查询准备中错过了一个括号。

// missing paren...........................................................................................here: v
$stmt = $conn->prepare("INSERT INTO item_details (item_id,value,circulation) VALUES (:item_id,:value,:circulation)");

在php.net上的execute()之后查看documentation for reading PDO query errors

此外,最好将所有结果组合到单个插入操作中,而不是在循环的每次迭代中执行新插入。

答案 1 :(得分:0)

您忘记了值中的右括号:     准备(&#34; INSERT INTO item_details(item_id,value,circulation)VALUES(:item_id,:value,:circulation)&#34;);