首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数组在MYSQL中插入时出现PHP错误

问使用数组在MYSQL中插入时出现PHP错误
EN

Stack Overflow用户
提问于 2013-07-17 17:29:32
回答 3查看 409关注 0票数 0

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

代码语言:javascript
复制
Column count doesn't match value count at row 1

以下是我的代码

代码语言:javascript
复制
<?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());
    }
}
?>

请帮帮忙..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-17 17:58:20

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

SQL

  • 回显我试图对数据库运行的查询。这确保我传递的是变量的值,而不是文本'$variable'.
  1. Switch,并检查MySQL DB中的general.log表(假设您使用的是MySQL)。这将显示针对数据库运行的最后一次查询,并将以某种方式证明您的脚本是否正在针对数据库执行任何操作。

最后,我不像上面建议的那样对内爆等问题发表评论,但我也会补充以下内容。查看您的查询,看起来您正在执行我在第1点中提到的操作。

代码语言:javascript
复制
$sqli = mysql_query("INSERT INTO unicode (word, word_hash) VALUES ('$word', '$md5')") or die (mysql_error());

$word和$md5两边的单引号表示将$word和$md5直接传递到DB中。在使用双引号“...”中的变量时您不需要在它们周围放置任何东西,只需按原样使用它们即可。或者,如果您想使用单引号,可以连接查询字符串。

代码语言:javascript
复制
$sqli = mysql_query('INSERT INTO unicode (word, word_hash) VALUES ( ' . $word . ', ' . $md5 . ')') or die...

再次回显您需要确认的查询(不使用mysqli_query函数)。

希望这能有所帮助。

S

票数 1
EN

Stack Overflow用户

发布于 2013-07-17 17:34:50

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

代码语言:javascript
复制
$word = implode("'),('", $newwords);

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-17 17:38:32

您正在内爆$newwords,因此结果查询将如下所示:

代码语言:javascript
复制
...VALUES ('word1'),('word2'),('word3', 'md5 string')

向implode()添加$md5

代码语言:javascript
复制
$md5 = 'md5 string';
$word = implode("', '$md5'),('", array('word1', 'word2', 'word3'));

输出:

代码语言:javascript
复制
...VALUES ('word1', 'md5 string'),('word2', 'md5 string'),('word3', 'md5 string')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17696090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档