【问题标题】:PHP error while inserting in MYSQL with arrays使用数组插入 MYSQL 时出现 PHP 错误
【发布时间】:2013-07-15 18:54:27
【问题描述】:

我有一个将数组中的所有数据插入 MYSQL 的脚本。但是当数组中只有一个单词时,脚本不会出错,而当数组中有多个单词时,它会给出一个

Column count doesn't match value count at row 1

这是我的代码

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    include("connect.php");
    $counter = 0;
    $counters = 0;
    $string = mysql_real_escape_string($_POST['words']);
    $arr = explode(" ", $string);
    mysql_query("SET charset utf8");
    $sql = mysql_query("SELECT `word` FROM unicode WHERE word IN ('".implode("', '", $arr) . "')") or die (mysql_error());
    $dupes = array();
    while($r = mysql_fetch_assoc($sql)) {
        $dupes[] = $r['word'];
    }
    $newwords = array_diff($arr, $dupes);
    if(count($newwords)) {
        $word = implode("'),('", $newwords);
        $md5 = md5($word);
        $sqli = mysql_query("INSERT INTO unicode (word, word_hash) VALUES ('$word', '$md5')") or die (mysql_error());
    }
}
?>

请帮忙....

【问题讨论】:

  • 你正在崩溃 $words 所以你最终会得到类似 VALUES ('word1'),('word2'),('word3') 的东西

标签: php mysql arrays insert


【解决方案1】:

通常,当我遇到 SQL 问题时,我会执行以下操作来追踪问题。

  1. 回显我尝试针对数据库运行的 SQL 查询。这可以确保我传递的是变量的值,而不是文本“$variable”。

  2. 打开电源并检查 MySQL DB 中的 general.log 表(假设您使用的是 MySQL)。这将向您显示针对数据库运行的最后一次查询,并且如果您的脚本甚至对数据库执行任何操作,它将以一种或另一种方式证明。

最后,我并不像上面建议的那样对内爆等进行评论,但我也会添加以下内容。查看您的查询,您似乎正在执行我在第 1 点中谈到的内容。

$sqli = mysql_query("INSERT INTO unicode (word, word_hash) VALUES ('$word', '$md5')") or die (mysql_error());

$word 和 $md5 周围的单引号实际上意味着将 $word 和 $md5 传递到数据库中。在双引号“...”中使用变量时,您不需要在它们周围放置任何东西,只需按原样使用它们即可。或者,如果您想使用单引号,您可以连接查询字符串。

$sqli = mysql_query('INSERT INTO unicode (word, word_hash) VALUES ( ' . $word . ', ' . $md5 . ')') or die...

再次回显查询(没有 mysqli_query 函数)以确认。

希望这会有所帮助。

S

【讨论】:

  • 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''),('ch'),('fgh, a1f3c00a8cb073d61cd6827189a118fe)' 附近使用正确的语法
  • 你能通过将没有mysqli_query函数的$sqli回显到这个线程来添加完整的SQL语句吗?
  • srry...实际上我是一个新手....你能告诉我在没有 mysql_query 的情况下回显 $sqli 的代码???thxx 提前
  • 为变量赋值 $sqli = ("INSERT INTO unicode (word, word_hash) VALUES ('$word', '$md5')") 或 die (mysql_error()); - 回声 $sqli 。 "
    ";
  • 您遇到过这个问题吗?
【解决方案2】:

你正在内爆$newwords,所以生成的查询看起来像:

...VALUES ('word1'),('word2'),('word3', 'md5 string')

$md5 添加到implode()

$md5 = 'md5 string';
$word = implode("', '$md5'),('", array('word1', 'word2', 'word3'));

输出:

...VALUES ('word1', 'md5 string'),('word2', 'md5 string'),('word3', 'md5 string')

【讨论】:

  • 查看您当前的代码,您必须从 $word 计算 md5 指纹,然后再次 implode $newwords 以便 $md5 可以使用
  • 对不起...我没明白...实际上我认为这是问题...但是我需要生成每个单词的 md5 并插入单词和 md5 .. .??提前谢谢...
【解决方案3】:

INSERT 查询中的列参数数量超过 2 个,但您只提供了 2 个值。

$word = implode("'),('", $newwords);

这里的这句话是罪魁祸首。当您对$newwords 数组进行内爆时,您可能会得到超过 2 个 的值。插入 MySQL 查询时,它与您提供的 VALUES 的数量不匹配。这就是导致错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多