Php 将数据存储到SQL DB时出现问题
我正在尝试使用以下查询将一些表单数据存储到SQL数据库: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 = "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感谢您的指点。不知道我怎么会错过。