我正在尝试从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不是我的强项!
答案 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')