Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入失败的SQLITE&;PHP PDO-一般错误:25绑定或列索引超出范围_Php_Sqlite_Pdo_Slim - Fatal编程技术网

插入失败的SQLITE&;PHP PDO-一般错误:25绑定或列索引超出范围

插入失败的SQLITE&;PHP PDO-一般错误:25绑定或列索引超出范围,php,sqlite,pdo,slim,Php,Sqlite,Pdo,Slim,我试图在Slim框架中使用一个phppdo函数将一些数据插入数据库,但是当我使用curl发布时,我得到了以下错误: SQLSTATE[HY000]:一般错误:25绑定或列索引超出范围 我使用的curl命令是 curl -i -X POST -H 'Content-Type: application/json' -d '{"category_name":"cat3", "item_name":"test"}' http://localhost/api/add 所讨论的PHP函数是 误差函

我试图在Slim框架中使用一个phppdo函数将一些数据插入数据库,但是当我使用curl发布时,我得到了以下错误:

SQLSTATE[HY000]:一般错误:25绑定或列索引超出范围

我使用的curl命令是

curl -i -X POST -H 'Content-Type: application/json' -d '{"category_name":"cat3",     "item_name":"test"}' http://localhost/api/add
所讨论的PHP函数是

误差函数 sql基本上是将一个新类别添加到类别表中,然后将一个新项目添加到引用新创建类别的项目表中。如果我在sqlite中运行查询,那么它似乎可以添加所需的行,查询是

insert into category(category_name) values ('cat2');
insert into item (category_id,item_name) values
((select category_id from category where category_name = 'cat2'),'item3');
我为已经存在的类别写了类似的东西,似乎效果不错

相似工作函数 通过阅读,我相信我需要分别设置两个:category\u name引用,这就是为什么我得到了:category\u name&:category\u name 2。否则,据我所知,这应该是预期的工作。非常感谢您的建议

工作功能由IMSoP和jeroen的回答提供 虽然这可能不是最漂亮的解决方案,但它确实起到了作用。谢谢你们的建议

function addContent() {
    $request = \Slim\Slim::getInstance()->request();
    $content = json_decode($request->getBody());
    $sql_category = "insert into category (category_name) values (:category_name);";
    $sql_item = "insert into item (category_id,item_name) values 
((select category_id from category where category_name = :category_name),     :item_name);";
    try {
        $db = getConnection();

        $stmt_category = $db->prepare($sql_category);
        $stmt_category->bindParam("category_name", $content->category_name);
        $stmt_category->execute();

        $stmt_item = $db->prepare($sql_item);
        $stmt_item->bindParam("category_name", $content->category_name);
        $stmt_item->bindParam("item_name", $content->item_name);
        $stmt_item->execute();

        $db = null;
        echo json_encode($content);
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}';
    }
}

问题可能是PDO不能在一个查询中执行多个sql语句。要查看这是否是问题所在,只需将查询拆分为不同的调用


如果您的系统满足在PDO中运行多个查询的要求,您也可以这样做。

问题可能是PDO无法在一个查询中执行多个sql语句。要查看这是否是问题所在,只需将查询拆分为不同的调用


如果您的系统满足在PDO中运行多个查询的要求,您也可以这样做。

您试图准备的SQL字符串包含2条SQL语句。我不确定,但很可能SQLite(或PDO驱动程序)不支持这一点,所以我们只准备了其中一个,这意味着另一个中的占位符没有定义


请尝试将其分离为两个单独的语句,每个语句分别准备和执行。

您尝试准备的SQL字符串包含两个SQL语句。我不确定,但很可能SQLite(或PDO驱动程序)不支持这一点,所以我们只准备了其中一个,这意味着另一个中的占位符没有定义


尝试将它分成两个单独的语句,每个语句分别准备和执行。

根据标记,这是SQLite,而不是SQLMySQL@IMSoP没错,链接/最后一段不适用。根据标签,这是SQLite,不是MySQL@IMSoP你说得对,链接/最后一段不适用。谢谢,我已经按照要求完成了此项工作,请参见问题的补充。谢谢,我已经按照要求完成了此项工作,请参见问题的补充。
function addContent() {
    $request = \Slim\Slim::getInstance()->request();
    $content = json_decode($request->getBody());
    $sql = "insert into item (category_id,item_name) values
((select category_id from category where category_name = :category_name), :item_name);";
    try {
        $db = getConnection();
        $stmt = $db->prepare($sql);
        $stmt->bindParam("category_name", $content->category_name);
        $stmt->bindParam("item_name", $content->item_name);
        $stmt->execute();
        $db = null;
        echo json_encode($content);
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}';
    }
}
function addContent() {
    $request = \Slim\Slim::getInstance()->request();
    $content = json_decode($request->getBody());
    $sql_category = "insert into category (category_name) values (:category_name);";
    $sql_item = "insert into item (category_id,item_name) values 
((select category_id from category where category_name = :category_name),     :item_name);";
    try {
        $db = getConnection();

        $stmt_category = $db->prepare($sql_category);
        $stmt_category->bindParam("category_name", $content->category_name);
        $stmt_category->execute();

        $stmt_item = $db->prepare($sql_item);
        $stmt_item->bindParam("category_name", $content->category_name);
        $stmt_item->bindParam("item_name", $content->item_name);
        $stmt_item->execute();

        $db = null;
        echo json_encode($content);
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}';
    }
}