【问题标题】:PHP Get JSON & Insert Into DB Via PDO [duplicate]PHP获取JSON并通过PDO插入数据库[重复]
【发布时间】:2017-07-16 02:11:57
【问题描述】:

我的 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. 为什么我的脚本不能工作很明显吗?如果是这样,请您解释一下,但是我的上述问题将有助于我的学习曲线与未来的发展!

【问题讨论】:

  • 不应该是 bindParam 而不是 bindparam 吗? [错字] 。您可以在 try/catch 块中添加执行部分。

标签: mysql json pdo


【解决方案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

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

【讨论】:

    【解决方案2】:

    您忘记了值中的右括号: prepare("INSERT INTO item_details (item_id,value,circulation) VALUES (:item_id,:value,:circulation)");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多