MySQL INSERT和UPDATE查询不适用于PHP 5.2.17

时间:2016-06-30 04:04:27

标签: php mysql sql-update sql-insert

我正在使用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中推荐的。

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

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查询的正确形式?

1 个答案:

答案 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");
}

现在,如果您遇到错误,请检查您的日志。