2017-02-10 16 views
0

次のデータをMySQLデータベースに保存します。PHPでjsonデータをPHPで保存する

次のコードは2つの警告を表示しています

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(); 
} 
+2

値。 '$ row'は配列ではなく、値です。だから '$ row ['domainname']'、 '$ row ['domainid']'、...はすべて間違っています。 –

+0

名前付きパラメータを使用した場合、データの配列をロードするのが面倒なので、これはもっと簡単になる可能性があります。 – RiggsFolly

+0

これは私にそれを示しています致命的なエラー:未定義のメソッドを呼び出すPDOStatement :: bind_param() – Siddhesh

答えて

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(?,?,?,?,?,?,?,?,?)"); 
$col=1; 
foreach ($items as $item) { 
    $stmt->bindParam($col, $item); 
    $col++; 
} 
$stmt->execute(); 
+0

それは働いた。どうもありがとうございました。あなたは命の恩人です:) – Siddhesh

+0

@Siddhesh質問を閉じるために答えを受け入れてください。そうでなければ、オープン*質問として浮かびます。 [スタックオーバーフローに関する回答を受け取る方法](http://meta.stackexchange.com/a/5235) –

0

まず末尾のドットを削除(。)配列からのこの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(?,?,?,?,?,?,?,?,?)"); 

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

$stmt->execute(); 
` 
関連する問題