【问题标题】:Save json data in MySQL using php使用php在MySQL中保存json数据
【发布时间】:2017-02-10 17:48:34
【问题描述】:

我想将以下数据保存到 MySQL 数据库中。

以下代码向我显示了两个警告

1- 非法的字符串偏移。

2- 只有变量可以通过引用传入。

请帮忙。

$db = new PDO('mysql:host=localhost;dbname=whois;charset=utf8mb4', 'root', '');
$items = array(
        'Domain Name:' => 'domain.name',
        'Domain ID:' => 'domain.handle',
        'Sponsoring Registrar:' => 'domain.sponsor',
        'Registrar ID:' => 'domain.sponsor',
        'Domain Status:' => 'domain.status.',
        'Status:' => 'domain.status.',
        'Name Server:' => 'domain.nserver.',
        'Nameservers:' => 'domain.nserver.',
        'Maintainer:' => 'domain.referer',
);

$stmt = $db->prepare("INSERT INTO temdata VALUES(?,?,?,?,?,?,?,?,?)");

foreach ($items as $row) {

    $stmt->bindParam(1, $row['domainname']);
    $stmt->bindParam(2, $row['domainid']);
    $stmt->bindParam(3, $row['registrar']);
    $stmt->bindParam(4, $row['registrarid']);
    $stmt->bindParam(5, $row['domainstatus']);
    $stmt->bindParam(6, $row['status']);
    $stmt->bindParam(7, $row['server']);
    $stmt->bindParam(8, $row['nameservers']);
    $stmt->bindParam(9, $row['maintainer']);
    $stmt->execute();
}

【问题讨论】:

  • 让我们从这个开始。 $row 不是数组,而是一个值。所以$row['domainname']$row['domainid'],……都错了。
  • 如果你使用命名参数,在费心加载数据数组之后,这可能会容易很多
  • 现在它向我显示致命错误:调用未定义的方法 PDOStatement::bind_param()
  • 让我们从头开始。您使用的是 PDO 还是 MYSQLI_ 数据库扩展
  • $db = new PDO('mysql:host=localhost;dbname=whois;charset=utf8mb4', 'root', '');

标签: php mysql json database


【解决方案1】:

我认为这会起作用,但我个人希望在发布之前更强大。

$items = array(
        'Domain Name:' => 'domain.name',
        'Domain ID:' => 'domain.handle',
        'Sponsoring Registrar:' => 'domain.sponsor',
        'Registrar ID:' => 'domain.sponsor',
        'Domain Status:' => 'domain.status.',
        'Status:' => 'domain.status.',
        'Name Server:' => 'domain.nserver.',
        'Nameservers:' => 'domain.nserver.',
        'Maintainer:' => 'domain.referer',
);

$stmt = $db->prepare("INSERT INTO temdata VALUES(?,?,?,?,?,?,?,?,?)");
$col=1;
foreach ($items as $item) {
    $stmt->bindParam($col, $item);
    $col++;
}
$stmt->execute();

【讨论】:

【解决方案2】:

首先从数组值中删除尾随点 (.)

$items = array(
    'Domain Name:' => 'domain.name',
    'Domain ID:' => 'domain.handle',
    'Sponsoring Registrar:' => 'domain.sponsor',
    'Registrar ID:' => 'domain.sponsor',
    'Domain Status:' => 'domain.status',
    'Status:' => 'domain.status',
    'Name Server:' => 'domain.nserver',
    'Nameservers:' => 'domain.nserver',
    'Maintainer:' => 'domain.referer',
);
$stmt = $db->prepare("INSERT INTO temdata VALUES(?,?,?,?,?,?,?,?,?)");

$i = 1;
foreach ($items as $row) {
    $stmt->bindParam($i, $row);
    $i++;
}

$stmt->execute();
`

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 2014-12-02
    • 2013-04-24
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2013-03-11
    • 2012-04-27
    • 2010-12-04
    相关资源
    最近更新 更多