0

SimpleXMLを使用してアプリにロードされたxmlドキュメントのノードからデータを保存しようとしています。以下は私のコードですが、致命的なエラーが発生するため、SQLステートメントに問題があります。

id(以下のエラーメッセージで参照)が列としてではなく、入力される値として使用されているため、これがスローされる理由がわかりません。

だから、私はここで何が間違っているのですか?ありがとう!

php:

    $db;

    $theProducers = simplexml_load_file('sources/producers.xml');

    foreach ($theProducers->producer as $producer) {
        $attr = $producer->attributes();
        $producers[$i]['id'] = (int)$attr[0];
        $producers[$i]['name'] = (string)$producer->name;
        $producers[$i]['address'] = (string)$producer->address;
        $producers[$i]['zipcode'] = (string)$producer->zipcode;
        $producers[$i]['town'] = (string)$producer->town;
        $producers[$i]['url'] = (string)$producer->url;
        $producers[$i]['imgurl'] = (string)$producer->imgurl;

        $i += 1;
    }

    try {
            $db = new PDO('sqlite:ProducersDB.sqlite');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
    catch(PDOException $e) {
        die("Something went wrong: " . $e->getMessage());
    }

    for($i = 0; $i < count($producers); $i++) {

        $sql = "INSERT INTO producers (producerid, name, address, zipcode, town, url, imgurl)
                VALUES($producers[$i]['id'], $producers[$i]['name'], $producers[$i]['address'], $producers[$i]['zipcode'], $producers[$i]['town'], $producers[$i]['url'], $producers[$i]['imgurl']); ";

        if(!$db->query($sql)) {
            die("Couln't execute query!");
        }
    }

エラーメッセージ:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]:
General error: 1 no such column: 'id'' in
/Applications/XAMPP/xamppfiles/htdocs/app/index.php:55 Stack trace: #0
/Applications/XAMPP/xamppfiles/htdocs/app/Labb2/index.php(55):
PDO->query('INSERT INTO pro...') #1 {main} thrown in
/Applications/XAMPP/xamppfiles/htdocs/app/index.php on line 55

db構造:

Table: Producers

id INTEGER PRIMARY KEY,
producerid INT,
name TEXT,
address TEXT,
zipcode INT,
town TEXT,
url TEXT,
imgurl TEXT
4

2 に答える 2

1

テーブル内のINSERT要素へのクエリが適切に構築されていません。値はPHP配列内にあり、二重引用符の間で正しく解釈されません。次のようになります。

$sql = "INSERT INTO producers(producerid, name)
        VALUES ('" . $producers[$i]['id'] . "', '" . $producers[$i]['name'] . "')";

また、自分で作成するのではなく、PDOからprepareメソッドを調べて、クエリに動的な値を適切に設定する必要があります。

編集:文字列に関するPHPのドキュメントによると、私は間違っており、二重引用符で囲まれた配列を解釈できます。混乱して申し訳ありません。

于 2012-12-02T19:15:08.220 に答える
1

文字列解析のドキュメントによると、多次元配列では複雑な構文を使用する必要があります。また、SQL文字列は引用符で囲む必要があります。

$sql = "INSERT INTO producers (...)
        VALUES({$producers[$i]['id']}, '{$producers[$i]['name']}', ..."

文字列のフォーマットの問題を回避するために、パラメータを使用することをお勧めします。

于 2012-12-02T21:42:11.593 に答える