我可能会发疯,但我发誓下面的代码昨天正在工作,现在它无法正常工作。我注意到它没有插入数据库,我收到错误:
You have an error in your SQL syntax; check the manual that corresponds
to your MariaDB server version for the right syntax to use near 's',
'39866', '9780448438047', 'Miss Spider's Sunny Patch Friends: Fun with Bounc' at line 1
以下是查询。我知道我没有使用转义字符串/预处理语句,但那是因为这只是一个localhost数字cruncher。
$insert = mysqli_query($connect, "INSERT INTO books
(subject, booknum, isbn, title, author, publisher, year,
format, mark, hurt, pubprice, srp, avail) VALUES
('$subject', '$booknumber', '$isbn', '$title', '$author',
'$publisher', '$year', '$format', '$mark', '$hurt',
'$pubprice', '$srp', '$avail')") or die(mysqli_error($connect));
似乎甚至评论了这一行并且正在做:
$insert1 = mysqli_query($connect, "INSERT INTO books (subject) VALUES
('$subject')") or die(mysqli_error($connect));
也会导致错误。我猜这意味着错误实际上位于我的数据库连接本身?我正在使用:
<?php
$connect = mysqli_connect("localhost", "root", "", "wholesale");
if(mysqli_connect_errno()) {
echo "Failed to connect. Error: " . mysqli_connect_error();
}
页面顶部包含以下内容:
include 'db.php';
但就像我说的那样,这个应用程序昨晚正在运行。从那以后发生的所有变化都是我关闭并在我的电脑上重新启动xampp,据我所知。
答案 0 :(得分:0)
根据此部分to use near 's', '39866',
判断我假设$subject
中包含的值包含单引号,例如它可能等于:&#34;这些是单词&#39; s&# 34 ;.这就是创建错误的原因。您需要转义它们(使用mysqli_real_escape_string()
或类似的东西),或使用预准备语句。
答案 1 :(得分:0)
您需要立即重新考虑插入数据的方式。该错误告诉您问题与此值有关:
&#39;蜘蛛小姐的阳光补丁朋友:与Bounc的乐趣&#39;
这里书名中的撇号打破了SQL查询。这指出了一个更大的问题,虽然这是改变查询的意外值。你可以先简单地逃避这些价值,但这会掩盖一个严重的问题。您的代码对SQL注入开放。
您应该使用参数化查询:How can I prevent SQL injection in PHP?
答案 2 :(得分:-1)
您应该清理输入,在插入时使用htmlentities,从数据库中选择时使用html_entity_decode。
$subject = htmlentities($subject);
$booknumber = htmlentities($booknumber); //and etc.
$insert = mysqli_query($connect, "INSERT INTO books (subject, booknum, isbn, title, author, publisher, year, format, mark, hurt, pubprice, srp, avail) VALUES ('$subject', 'htmlentities($booknumber', '$isbn', '$title', '$author', '$publisher', '$year', '$format', '$mark', '$hurt', '$pubprice', '$srp', '$avail')") or die(mysqli_error($connect));