【问题标题】:php explode array data inserting errorphp爆炸数组数据插入错误
【发布时间】:2017-01-03 07:40:53
【问题描述】:

当我尝试将具有另一个字符串值的数组插入数据库时​​,它会给出列计数与值计数不匹配的错误。我的代码在下面给出了为什么会发生此错误的任何解释

$Skills = "java,php";
$memberId ="1";
$wordArray = explode(",", $Skills);
$query = "INSERT INTO tempskill (skill,memberId) VALUES ('" .implode("'),  ('", $wordArray). "'  , '".$memberId."' ) ";
echo  $Skills;                   

mysql_query($query) or die ('Error :' . mysql_error());

此代码输出是 - java,C#Error :Column count doesn't match value count at row 1

【问题讨论】:

  • 通过在 $query 上添加回显来打印您的查询并在 mysql 终端上运行查询并检查错误
  • 感谢您的回复,当我回显查询时它给出了这个 - INSERT INTO tempskill (skill,memberId) VALUES ('abc'), ('def', '1') Error :Column count does' t 匹配第 1 行的值计数
  • abc 的成员 ID 未设置。你看到了吗?
  • 是的,当使用这样的 SQL 时,它可以工作 INSERT INTO tempskill (skill,memberId) VALUES ('abc' , '1' ), ('def', '1') 但问题是如何像这样通过爆炸

标签: php mysql sql


【解决方案1】:

要将memberId 添加到您应该使用的每对插入值中:

$query = "INSERT INTO tempskill (skill,memberId) VALUES ('" .implode("', '" . $memberId . "'),  ('", $wordArray) . "', '" . $memberId . "')";
// echoes `INSERT INTO tempskill (skill,memberId) VALUES ('java', '1'),  ('php', '1')`

但是

  1. mysql 扩展已过时,在 php7 中已删除
  2. 此类代码易受 sql 注入攻击。

所以,我建议你转移到PDO/mysqli api 和准备好的语句。更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多