【问题标题】:Why doesn't INSERT INTO work in a nearly identical code where it works? [duplicate]为什么 INSERT INTO 不能在几乎相同的代码中工作? [复制]
【发布时间】:2019-11-10 12:53:19
【问题描述】:

所以,一个有效的代码有这些 html 表单(showBack.php):

<form action="add.php" method="POST">
Name: <input type="text" name="addName"><br>
Price: <input type="text" name="addPrice"><br>
<input type="submit" value="Add">

然后将输入插入到另一个文件(add.php)中的数据库中:

$nam=$_POST['addName'];
$prcc=$_POST['addPrice'];
$sql= 'INSERT INTO korzina (Name, Price, Num)
VALUES ("'.$nam.'","'.$prcc.'", "0")';
mysqli_query($conn, $sql);

现在,我所做的只是添加更多字段并更改添加该信息的表 (编辑.php):

<form action="addd.php" method="POST">
Аты: <br><input type="text" name="addName"><br>
Сипаты: <br><input type="text" name="addDes"><br>
Бағасы: <br><input type="text" name="addPrc"><br>
Өндіруші бағасы: <br><input type="text" name="addRrp"><br>
Саны: <br><input type="text" name="addQ"><br>
Суреті: <br><input type="text" name="addImg"><br>
<input type="hidden" name="addDat" value="<?=$date ?>">
<input type="submit" value="Қосу">

这只是意味着要在另一个文件中添加更多值(addd.php):

$nam=$_POST['addName'];
$des=$_POST['addDes'];
$prc=$_POST['addPrc'];
$rrp=$_POST['addRrp'];
$quant=$_POST['addQ'];
$img=$_POST['addImg'];
$dat=$_POST['addDat'];
$sql= 'INSERT INTO products (name, desc, price, rrp, quantity, img, date_added)
VALUES ("'.$nam.'","'.$des.'", "'.$prc.'", "'.$rrp.'", "'.$quant.'", "'.$img.'", "'.$dat.'")';
mysqli_query($conn, $sql);

但现在它不起作用。这是完全相同的代码,只是扩展了一点,但它不起作用,它让我发疯。

编辑:没有任何错误,只是代码不起作用。较短的代码有效,即将输入添加到表中没问题,但现在我添加了更多变量,它没有。另外,这只是一个愚蠢的任务,我不关心sql注入或其他什么,我相信我的老师甚至不知道它是什么

【问题讨论】:

  • 始终使用参数!永远不要使用文字值来处理查询字符串。那么你就不会有这些问题了。再一次。
  • 检查错误消息或服务器日志以找出究竟是什么“不起作用”。
  • 请阅读SQL injection。不要使用字符串连接构建查询,而是使用 prepared statementsbound parameters。请参阅 this pagethis post 了解一些很好的示例。
  • 您不知道哪里出了问题,因为您没有检查代码中的错误。永远不要假设代码总是能完美运行。使用mysqli_error() 从数据库中获取详细的错误消息。
  • @BartFriederichs 我没有提到错误,因为没有错误。代码不起作用但没有错误

标签: php html mysql sql forms


【解决方案1】:

这可能是因为desc 是保留关键字。 尝试用反引号包围它:` 像这样:

$sql= 'INSERT INTO products (`name`, `desc`, `price`, `rrp`, `quantity, `img`, `date_added`)
VALUES ("'.$nam.'","'.$des.'", "'.$prc.'", "'.$rrp.'", "'.$quant.'", "'.$img.'", "'.$dat.'")';

P.S:作为一般规则,将 Database namesTable NamesColumns 用反引号括起来:` 它将防止一些这样的错误 P.S:使用这种查询是危险的(SQL 注入风险)。尝试 PDO 中的准备好的语句。 像这样:

$stmt = $pdo->prepare("INSERT INTO `my_table` (`col_1`,`col_2`,`col_2`) VALUES (?,?,?)");
$stmt->execute([ $val1, $val2, $val3 ]);

【讨论】:

  • 注意 OP 正在使用 mysqli,因此您编写的准备好的语句将不起作用。可能值得添加对stackoverflow.com/questions/17053466/… 的引用,这样 OP 将来可能会出错。 desc 问题应该已经报告了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多