首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图保存到SQLite db时发生致命错误

问试图保存到SQLite db时发生致命错误
EN

Stack Overflow用户
提问于 2012-12-02 19:09:55
回答 2查看 718关注 0票数 0

我正在尝试将数据保存在xml中的节点中,该文档被加载到带有SimpleXML的应用程序中。下面是我的代码,但是SQL语句有问题,因为我得到了一个致命的错误。

我无法理解为什么会抛出它,因为id (在下面的错误消息中引用)被用作要输入的值,而不是作为列。

我在这里做错什么了?谢谢!

php:

代码语言:javascript
复制
    $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!");
        }
    }

错误消息:

代码语言:javascript
复制
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结构:

代码语言:javascript
复制
Table: Producers

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-02 21:42:11

根据字符串解析文档,多维数组要求您使用复杂的语法;此外,必须引用SQL字符串:

代码语言:javascript
复制
$sql = "INSERT INTO producers (...)
        VALUES({$producers[$i]['id']}, '{$producers[$i]['name']}', ..."

为了避免字符串格式设置问题,建议使用参数。

票数 1
EN

Stack Overflow用户

发布于 2012-12-02 19:15:08

在表中插入元素的查询没有正确生成。您的值位于PHP数组中,在双引号之间没有正确解释,应该如下所示:

代码语言:javascript
复制
$sql = "INSERT INTO producers(producerid, name)
        VALUES ('" . $producers[$i]['id'] . "', '" . $producers[$i]['name'] . "')";

您还应该查看PDO中的准备方法,以正确设置查询中的动态值,而不是自己构建动态值。

编辑:根据字符串上的PHP文档,我错了,您可以在双引号之间解释一个数组,很抱歉造成了混乱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13672716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档