Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数据存储到SQL DB时出现问题_Php_Sql_Forms - Fatal编程技术网

Php 将数据存储到SQL DB时出现问题

Php 将数据存储到SQL DB时出现问题,php,sql,forms,Php,Sql,Forms,我正在尝试使用以下查询将一些表单数据存储到SQL数据库: $sql = "INSERT INTO attendees (first_name, surname, partner, phone) VALUES ($first_name, $surname, $partner, $phone)"; 如果我硬编码这些值来测试它,它会工作得很好,但是当使用这些变量时,它会中断并给出错误1054 $first_name = $_POST['first_name']; $surname = $_PO

我正在尝试使用以下查询将一些表单数据存储到SQL数据库:

$sql = "INSERT INTO attendees (first_name, surname, partner, phone) VALUES ($first_name, $surname, $partner, $phone)";
如果我硬编码这些值来测试它,它会工作得很好,但是当使用这些变量时,它会中断并给出错误1054

$first_name = $_POST['first_name'];
$surname    = $_POST['surname'];
$partner    = $_POST['partner'];
$phone  = $_POST['phone'];
有人能帮忙吗

$sql = "INSERT INTO attendees (first_name, surname, partner, phone) VALUES ($first_name, $surname, $partner, $phone)";
应该是

$sql = "INSERT INTO attendees (first_name, surname, partner, phone) VALUES ('$first_name', '$surname', '$partner', '$phone')";
字段内容周围缺少引号

警告:您的代码易受SQL注入攻击

尝试使用和wiki页面。或者至少使用

应该是

$sql = "INSERT INTO attendees (first_name, surname, partner, phone) VALUES ('$first_name', '$surname', '$partner', '$phone')";
字段内容周围缺少引号

警告:您的代码易受SQL注入攻击


尝试使用和wiki页面。或者至少使用

Err 1054表示您使用的列名不存在

在本例中,由于insert语句似乎没有任何错误(假设所有变量中都有数据),这意味着您可能键入了一个列名


再想一想,您可能需要在字符串周围加上单引号,但我的答案的第一部分仍然有效。

Err 1054意味着您使用的是一个不存在的列名

在本例中,由于insert语句似乎没有任何错误(假设所有变量中都有数据),这意味着您可能键入了一个列名


再想一想,您可能需要在字符串周围加上单引号,但我的答案的第一部分仍然有效。

首先,停止使用mysql函数,寻找PDO和准备好的语句:如果您按照建议做,这个问题将自行排序

无论如何,问题是查询将用
$\u POST
数组中包含的字符串替换这些值。。。但是没有字符串分隔符

这意味着mysql将它们视为列名,空格将打断它们

解决方案:

$sql = "INSERT INTO attendees (first_name, surname, partner, phone) VALUES ('$first_name', '$surname', '$partner', '$phone')";
请注意,这将使您容易受到SQL注入攻击

PDO的外观与此类似:

$stmt = $db->prepare("INSERT INTO attendees (first_name, surname, partner, phone) VALUES (:fname, :sname, :partn, :phone)");
$stmt->execute(array(':fname' => $first_name, ':sname' => $surname_name, [the others]))

首先,停止使用mysql函数,寻找PDO和准备好的语句:如果你按照建议去做,这个问题将自行解决

无论如何,问题是查询将用
$\u POST
数组中包含的字符串替换这些值。。。但是没有字符串分隔符

这意味着mysql将它们视为列名,空格将打断它们

解决方案:

$sql = "INSERT INTO attendees (first_name, surname, partner, phone) VALUES ('$first_name', '$surname', '$partner', '$phone')";
请注意,这将使您容易受到SQL注入攻击

PDO的外观与此类似:

$stmt = $db->prepare("INSERT INTO attendees (first_name, surname, partner, phone) VALUES (:fname, :sname, :partn, :phone)");
$stmt->execute(array(':fname' => $first_name, ':sname' => $surname_name, [the others]))

这将更加安全,而且明显更好。

请转义并验证您的输入,否则您将容易受到SQL注入的攻击

下面是一个关于如何做到这一点的好解决方案列表:


如果可能的话,基本上尝试使用准备好的语句,否则使用
mysql\u real\u escape\u string()

请转义并验证您的输入,否则您将容易受到SQL注入的攻击

下面是一个关于如何做到这一点的好解决方案列表:


如果可能的话,基本上尝试使用准备好的语句,否则使用
mysql\u real\u escape\u string()

如果不引用变量,请尝试在所有变量中添加引号。是否使用像
mysql\u*
这样的超级弃用函数?然后,如果您这样做,您可能还想使用
mysql\u real\u escape\u string()
函数和引号:)尝试使用不引用变量的wiki页面,尝试在所有变量中添加引号。您是否要使用超弃用的函数,如
mysql.*
?如果您这样做,您可能还想使用
mysql\u real\u escape\u string()
函数和引号:)尝试使用wiki页面。此解决方案容易受到SQL注入攻击。请解决这个问题,或者至少提一提。@Bluewind感谢您的指点。不知道我是怎么错过的。这个解决方案很容易受到SQL注入攻击。请解决这个问题,或者至少提一提。@Bluewind感谢您的指点。不知道我怎么会错过。