使用数组插入MYSQL时发生PHP错误
我有一个脚本,可以将数组中的所有数据插入MYSQL。但是当数组中只有一个单词时,脚本不会给出错误,而当数组中有多个单词时,脚本会给出错误使用数组插入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
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。“
”;你在这个问题上有进展吗?