我正在使用PHP和MySQL的网站上工作,首先我使用XAMPP预览我网站的构建,这里一切正常(XAMPP PHP版本是5.7),问题是我通过FTP上传的内容在我的网站上,INSERT
和UPDATE
查询无法处理我的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中推荐的。
此外,当我尝试插入行时,没有查询:
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查询的正确形式?
答案 0 :(得分:0)
您应该使用prepared statements来避免SQL注入攻击,并且您还应该捕获错误消息。 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");
}
现在,如果您遇到错误,请检查您的日志。