php - 我的错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册
问题描述
我在我的博客中遇到了问题。textik
当我在此错误中使用单引号时。
插入
clanky
(nadpis
,textik
,datum
,autor
,kategorie
) 值 (?, ?, ?, ?, ?);
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '?, ?, ?, ?, ?)' 附近使用正确的语法
我已经知道由于 SQL 注入,您不能在字符串中使用单引号。所以我试图修复它。我尝试了很多教程,但没有任何帮助。
<?php
if (isset($_POST["btn"])) {
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error){
die("ERROR: Could not connect. " . $conn->connect_error);
}
$nadpis = mysqli_real_escape_string($conn, $_POST['nadpis']);
$textik = mysqli_real_escape_string($conn, $_POST['textik']);
$datum = mysqli_real_escape_string($conn, $_POST['datum']);
$autor = mysqli_real_escape_string($conn, $_POST['autor']);
$kategorie = mysqli_real_escape_string($conn, $_POST['kategorie']);
$sql = "INSERT INTO `clanky` (`nadpis`, `textik`, `datum`, `autor`, `kategorie`)
VALUES (?, ?, ?, ?, ?);";
// '". $_POST['nadpis']."','". $_POST['textik']."','". $_POST['datum']."','". $_POST['autor']."','". $_POST['kategorie']."'
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
echo "SQL error";
} else {
mysqli_stmt_bind_param($stmt, "ssiss", $nadpis, $textik, $datum, $autor, $kategorie);
mysqli_stmt_execute($stmt);
}
if (mysqli_query($conn, $sql)) {
echo "New Record added";
header("Location: https://www.globalgraphicdesign.eu/welcome.php");
}else {
echo "Error" . $sql . "" . mysqli_error($conn);
}
$conn->close();
}
?>
我应该将您重定向到欢迎页面。
解决方案
您正在尝试准备它,并使用query()
,从而尝试执行它两次。使用时会失败,因为那里不允许使用query()
占位符。?
使用准备好的语句时,您也不应该转义输入。您也不应该在header()
通话前输出任何内容。您还可以启用 MySQLi 来引发异常,这使得错误处理更加容易。
您的整个片段可以简化为以下内容。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$conn = new mysqli($servername, $username, $password, $dbname);
if (isset($_POST["btn"])) {
$sql = "INSERT INTO `clanky` (`nadpis`, `textik`, `datum`, `autor`, `kategorie`)
VALUES (?, ?, ?, ?, ?);";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sssss", $_POST['nadpis'], $_POST['textik'], $_POST['datum'], $_POST['autor'], $_POST['kategorie']);
$stmt->execute();
header("Location: https://www.globalgraphicdesign.eu/welcome.php");
$stmt->close();
exit;
}
} catch (Exception $e) {
echo "Something went wrong. Please try again later";
error_log($e->getMessage());
}
推荐阅读
- apache-spark - 使用带有特定分隔符/分隔符的 Auto Loader 提取 CSV 数据
- php - Woocommerce - 使用 PHP 设置默认变化并将此值保存到数据库中
- c# - 当 API 调用完成时,如何从 .RAZOR 主页面中的所有子组件触发/刷新我的主 .RAZOR 页面?
- python - 在 python 的两个表中插入数据时出错
- java-8 - 如何从 Map 中删除空值
- javascript - 数据表不发送
- kotlin - Kotlin 错误智能转换为“X”是不可能的,因为“状态”是一个在尝试观察状态时具有打开或自定义 getter 的属性
- mongodb - 如何使用springboot应用程序在mongodb的不同数据库中创建集合
- python - 根据另一列删除熊猫数据框中的整行
- ios - 如何在 swiftUI 中将 Top Tabbar 与 ScrollView 或 List 同步?