MySQL无法执行INSERT INTO [table]。列数与第1行的值计数不匹配

时间:2016-01-29 14:59:43

标签: php mysql sql database

我正在尝试从HTML表单中提取信息,并使用以下代码将其放入数据库中:

$link = mysqli_connect("localhost", "user", "password", "MyDB");

if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

$sql = "INSERT INTO interest (name, email, dob, address) 
        VALUES ('$fullname', '$email', '$dob' '$addr')";
if(mysqli_query($link, $sql)){
    echo "Records added successfully.";
}else{
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}

mysqli_close($link);

它正常运行,我已经设法进行了2次测试,但现在我在提交页面的顶部出现以下错误

  

错误:无法执行INSERT INTO MyDB(名称,电子邮件,dob,   地址)VALUES('test name','test @email.com','2003-02-01'   '地址')。列数与第1行的值计数不匹配

我有另一种变体,它发送一个PHP电子邮件,这是我用来建立这个数据库连接的文件。

ID列上还有一个自动增量,如果有所不同,它将被设置为数据库中的主键?不幸的是,SQL不是我的强项!

4 个答案:

答案 0 :(得分:6)

鉴于您的查询中存在语法错误,'$dob' '$addr'中缺少逗号;您可以使用SQL注入,并且应该使用预准备语句。

  • 因此,为了您自己的安全,我提交了这个补充答案。

以下是使用MySQLi API的预准备语句的示例。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$link = mysqli_connect('localhost', 'xxx', 'xxx', 'my_db');

if (!$link) {
    die('Connect Error: ' . mysqli_connect_error());
}

// assuming these are the POST arrays taken from your HTML form if you're using one.
$fullname = $_POST['fullname'];
$email = $_POST['email'];
$dob = $_POST['dob'];
$addr = $_POST['addr'];

   $sql = ("INSERT INTO interest (name, email, dob, address) VALUES (?, ?, ?, ?)");

    $stmt = $link->prepare($sql) or die("Failed Execution");
    $stmt->bind_param('ssss', $fullname, $email, $dob, $addr);

    $stmt->execute();
    echo $stmt->error;

echo "SUCCESS";

    exit();

参考文献:

<强> Foonotes:

如果由于AI'd列而使用以下内容失败:

$sql = ("INSERT INTO interest (name, email, dob, address) VALUES (?, ?, ?, ?)");

您也可以尝试:(我使用id作为AI'd列作为示例)

$sql = ("INSERT INTO interest (id, name, email, dob, address) VALUES ('', ?, ?, ?, ?)");

可能就是这种情况,因为我之前已经看到过这种类型的SQL失败行为。

答案 1 :(得分:2)

你在这里错过了逗号:

VALUES ('$fullname', '$email', '$dob' '$addr')

因此(正如在错误文本中清楚地说的那样)列数不会计算马赫值。

应该是

VALUES ('$fullname', '$email', '$dob', '$addr')

答案 2 :(得分:2)

你错过了一个逗号

$sql = "INSERT INTO interest (name, email, dob, address) 
        VALUES ('$fullname', '$email', '$dob', '$addr')";
                                             ^here

答案 3 :(得分:0)

你错过了一个逗号:

VALUES ('$fullname', '$email', '$dob' '$addr')