gpt4 book ai didi

php - MySQL INSERT 和 UPDATE 查询在 PHP 5.2.17 上不起作用

转载 作者:行者123 更新时间:2023-11-29 20:50:17 25 4
gpt4 key购买 nike

我正在使用 PHP 和 MySQL 开发一个网站,首先我使用 XAMPP 预览我的网站的构建,这里一切正常(XAMPP PHP 版本是 5.7),问题是当我通过 FTP 上传内容时在我的网站上,INSERTUPDATE 查询不适用于我的 PHP 脚本。

我读过一些关于两个版本之间兼容性问题的文章,FTP 服务器使用 PHP 5.2.17。

SELECT 查询在服务器中工作正常,因此登录数据库不是问题。

这是我使用UPDATE的代码:

include_once 'db_post.php';
$mysqli = new mysqli(DATA_HOST, DATA_USER, DATA_PASSWORD, DATA_DATABASE);

$catTitle = mysqli_real_escape_string($mysqli, $_POST['catName']);
$catDesc = mysqli_real_escape_string($mysqli, $_POST['catDesc']);
$catID = mysqli_real_escape_string($mysqli, $_GET['ID']); // I get this in the redirection, the value isn't in the POST form

$cT = "UPDATE categorias SET NombreCat = '$catTitle', DescripcionCat = '$catDesc', ImagenCat = 'no_image.png' WHERE IDCat = $catID";

if ($mysqli->query($cT) === TRUE) { header("Location: ../management.php?Action=ManageCategories&Edit=Successful"); }
else { header("Location: ../management.php?Action=ManageCategories&Edit=Error"); }

重定向会发生错误,数据库中不会保存任何内容。

关于我的数据库的另一个信息是我正在使用 InnoDB 而不是 MyISAM,据称 phpMyAdmin 中推荐使用 InnoDB。

此外,当我尝试插入行时,没有查询:

include_once 'db_post.php';
$mysqli = new mysqli(DATA_HOST, DATA_USER, DATA_PASSWORD, DATA_DATABASE);

$catTitle = mysqli_real_escape_string($mysqli, $_POST['catName']);
$catDesc = mysqli_real_escape_string($mysqli, $_POST['catDesc']);

$cT = "INSERT INTO categorias (IDCat, NombreCat, DescripcionCat, ImagenCat) VALUES (null, '$catTitle', '$catDesc', 'no_image.png')";

if ($mysqli->query($cT) === TRUE) { header("Location: ../management.php?Action=ManageCategories&Add=Successful"); }
else { header("Location: ../management.php?Action=ManageCategories&Add=Error"); }

所以问题是,在该版本的 PHP 中,哪种是在 MySQL 中查询的正确形式?

最佳答案

您应该使用prepared statements为了避免 SQL 注入(inject)攻击,您还应该捕获错误消息。 PDO 使这比 mysqli 更容易:

include_once 'db_post.php';
$dsn = sprintf("mysql:host=%s;dbname=%s", DATA_HOST, DATA_DATABASE);
$db = new PDO($dsn, DATA_USER, DATA_PASSWORD);

if (empty($_GET["ID"])) {
$action = "Add";
$stmt = $db->prepare("INSERT INTO categorias (IDCat, NombreCat, DescripcionCat, ImagenCat) VALUES (null, ?, ?, 'no_image.png')";
$result = $db->prepare([$_POST["catName"], $_POST["catDesc"]);
} else {
$action = "Edit";
$stmt = $db->prepare("UPDATE categorias SET NombreCat = ?, DescripcionCat = ?, ImagenCat = 'no_image.png' WHERE IDCat = ?";
$result = $stmt->execute([$_POST["catName"], $_POST["catDesc"], $_GET["ID"]]);
}

if ($result === true) {
header("Location: ../management.php?Action=ManageCategories&$action=Successful");
} else {
error_log("Database error: " . $stmt->errorInfo());
header("Location: ../management.php?Action=ManageCategories&$action=Error");
}

现在,如果出现错误,只需检查日志即可。

关于php - MySQL INSERT 和 UPDATE 查询在 PHP 5.2.17 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38113796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com