【问题标题】:Insert data into MySql DB将数据插入 MySql DB
【发布时间】:2011-12-14 08:51:36
【问题描述】:

我正在创建一个类,并且我有一个函数,我想使用该函数将一些数据从一些输入中插入到一个表中。如果我检查表格,它会起作用,但我不断收到错误“prepare 中的参数数量与 bind_result 中的 arg 数量不匹配”。也不知道我的方法对不对..

private function insertData($foldName,$foldClass,$foldLink) {

    $sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES ('$foldName','$foldClass','$foldLink')";

    if($stmt = $this->connect->prepare($sql)) {
        $stmt->execute();
        $stmt->bind_result($foldName,$foldClass,$foldLink);
        $stmt->close();
        $error = false;
        $message['error'] = false;
        $message['message'] = "Data Successfuly Inserted";
        return json_encode($message);
    }
        else {
            $error = true;
            $message['error'] = true;
            $message['message'] = "Data Failed To Insert";
            return json_encode($message);
        }

}

【问题讨论】:

  • 插入语句不返回结果集,所以实际上没有什么可以绑定的,我想说;只需删除 $stmt->bind_result...
  • 我认为这是关于mysqli的问题?
  • 它与mysqli有关,我只是删除了bind_result()。让我测试一下,看看现在发生了什么......

标签: php arrays mysqli


【解决方案1】:

您根本不需要bind_result,因为您正在插入数据而不是选择任何数据。

但是您应该使用准备好的语句的核心功能。即:安全地将变量传递给语句对象,而不是将它们的“原始”值插入 SQL 字符串:

$sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES (?,?,?)";
$stmt = $this->connect->prepare($sql);
$stmt->bind_param("sss", $foldName, $foldClass, $foldLink);
$stmt->execute();

(我没有测试过。)

【讨论】:

  • 我刚刚做了,它成功了 :) 是的,我想要那个 if( ...prepare...) 所以我可以看看在这个过程中是否有错误...现在索引也是 5,我的意思是我将它设置为 Auto Increment int(11) 的 folder_id,我可以以某种方式重置它,让它从 1 开始吗?
  • @Roland 我很高兴它有效。我跳过if-statement 只是因为我的示例很简单。当然,你应该坚持你的if-statement。关于auto_increment-column:您可以删除folder_id 列并直接重新添加它,或者执行这样的MySQL 语句:ALTER TABLE folders AUTO_INCREMENT=1
  • 好的,谢谢。我是从 phpmyadmin 做的。我正在使用 XAMPP 处理本地服务器。有时我看到 OVERHEAD 80 并单击以优化它,但为什么会显示?
【解决方案2】:

查看本手册页上的第一个示例:http://php.net/manual/en/mysqli-stmt.bind-param.php

【讨论】:

    【解决方案3】:

    如果您要清空整个表的数据,请使用truncate 查询:

    TRUNCATE TABLE `table_name`
    

    这会将auto_increment 重置为1,但如果您不想清空整个表格,您可以改为alter

    ALTER TABLE `table_name` auto_increment = 1
    

    【讨论】:

    • 好吧,我正在清空它以准备用多维数组填充它。在我这样做之前它必须是空的。我有一个多维数组$array = array( array('Name'=>'Somename','Class'=>'Someclass','Link'=>'Somelink'), array(the same as the other one));,我想遍历它并获取二级数组并将它们存储在数据库中,与我在上面的问题中使用的数据库相同。我是这样想的:snippi.com/s/m7cl7gr。这行得通吗?
    • 我测试了它,它工作正常。感谢您提供有关截断的提示 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    相关资源
    最近更新 更多