Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
使用数组插入MYSQL时发生PHP错误_Php_Mysql_Arrays_Insert - Fatal编程技术网

使用数组插入MYSQL时发生PHP错误

使用数组插入MYSQL时发生PHP错误,php,mysql,arrays,insert,Php,Mysql,Arrays,Insert,我有一个脚本,可以将数组中的所有数据插入MYSQL。但是当数组中只有一个单词时,脚本不会给出错误,而当数组中有多个单词时,脚本会给出错误 Column count doesn't match value count at row 1 这是我的密码 <?php if($_SERVER['REQUEST_METHOD'] == 'POST') { include("connect.php"); $counter = 0; $counters = 0; $str

我有一个脚本,可以将数组中的所有数据插入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());
    }
}
?>

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

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

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

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

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

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

您正在内爆
$newwords
,因此生成的查询类似于:

...VALUES ('word1'),('word2'),('word3', 'md5 string')
$md5
添加到
内爆()

产出:

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

您正在内爆
$newwords
,因此生成的查询如下所示:

...VALUES ('word1'),('word2'),('word3', 'md5 string')
$md5
添加到
内爆()

产出:

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

通常,当我遇到SQL问题时,我会做以下事情来跟踪问题

  • 回显我试图针对DB运行的SQL查询。这确保我传递的是变量的值,而不是文本“$variable”

  • 打开并检查MySQL数据库中的general.log表(假设您使用的是MySQL)。这将向您显示针对DB运行的最后一个查询,并将以某种方式证明您的脚本是否正在针对DB执行任何操作

  • 最后,我不是像上面建议的那样对内爆等进行评论,但是我还要补充以下内容。查看您的查询,您似乎正在执行我在第1点中提到的操作

    $sqli = mysql_query("INSERT INTO unicode (word, word_hash) VALUES ('$word', '$md5')") or die (mysql_error());
    
    $word和$md5周围的单引号意味着将$word和$md5直接传递到DB中。当使用双引号内的变量“…”时,您不需要在它们周围放置任何东西,只需按原样使用它们。或者,如果您想使用单引号,您可以连接查询字符串

    $sqli = mysql_query('INSERT INTO unicode (word, word_hash) VALUES ( ' . $word . ', ' . $md5 . ')') or die...
    
    再次按原样回显查询(不使用mysqli_查询函数)以进行确认

    希望这有帮助


    S

    通常,当我遇到SQL问题时,我会做以下事情来跟踪问题

  • 回显我试图针对DB运行的SQL查询。这确保我传递的是变量的值,而不是文本“$variable”

  • 打开并检查MySQL数据库中的general.log表(假设您使用的是MySQL)。这将向您显示针对DB运行的最后一个查询,并将以某种方式证明您的脚本是否正在针对DB执行任何操作

  • 最后,我不是像上面建议的那样对内爆等进行评论,但是我还要补充以下内容。查看您的查询,您似乎正在执行我在第1点中提到的操作

    $sqli = mysql_query("INSERT INTO unicode (word, word_hash) VALUES ('$word', '$md5')") or die (mysql_error());
    
    $word和$md5周围的单引号意味着将$word和$md5直接传递到DB中。当使用双引号内的变量“…”时,您不需要在它们周围放置任何东西,只需按原样使用它们。或者,如果您想使用单引号,您可以连接查询字符串

    $sqli = mysql_query('INSERT INTO unicode (word, word_hash) VALUES ( ' . $word . ', ' . $md5 . ')') or die...
    
    再次按原样回显查询(不使用mysqli_查询函数)以进行确认

    希望这有帮助


    S

    你在内爆
    $words
    所以你会得到类似
    值('word1')、('word2')、('word3')
    你在内爆
    $words
    所以你会得到类似
    值('word1')、('word2')、('word3')的东西。
    看看你当前的代码,你必须从
    $word计算md5指纹,然后再次内爆
    $newwords
    ,这样
    $md5
    就可以使用了抱歉…我没有得到它…实际上我认为这是问题所在…但是我需要生成每个单词的md5并插入单词和md5。。。??thxx提前…查看您当前的代码,您必须从
    $word
    计算md5指纹,然后再次内爆
    $newwords
    ,这样
    $md5
    就可以使用了抱歉…我没有得到它…实际上我认为这是问题所在…但是我需要生成每个单词的md5并插入单词和md5。。。??thxx提前…您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在以下位置使用的正确语法:“”、(“ch”)、(“fgh,a1f3c00a8cb073d61cd6827189a118fe)'在第1行,您可以通过在不使用mysqli_查询函数的情况下回显$sqli来添加完整的SQL语句吗?Sry…实际上我是一个新手…您能告诉我在不使用mysql_查询的情况下回显$sqli的代码吗???thxx提前设计变量$sqli=('INSERT-INTO-unicode(word,word_-hash)值('$word','md5'))或死(mysql_-error()); - echo$sqli。“
    ”;这个问题解决了吗?您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在以下位置使用的正确语法:“”、(“ch”)、(“fgh,a1f3c00a8cb073d61cd6827189a118fe)'在第1行,您可以通过在不使用mysqli_查询函数的情况下回显$sqli来添加完整的SQL语句吗?Sry…实际上我是一个新手…您能告诉我在不使用mysql_查询的情况下回显$sqli的代码吗???thxx提前设计变量$sqli=('INSERT-INTO-unicode(word,word_-hash)值('$word','md5'))或死(mysql_-error()); - echo$sqli。“
    ”;你在这个问题上有进展吗?