【问题标题】:MySQL INSERT and UPDATE queries not working on PHP 5.2.17MySQL INSERT 和 UPDATE 查询不适用于 PHP 5.2.17
【发布时间】:2016-06-30 04:04:27
【问题描述】:

我正在使用 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 中查询的正确形式是什么?

【问题讨论】:

  • 那么 MySQL 给你什么错误作为它不成功的原因?
  • 你为什么使用 10 年前的 PHP 版本?那只是乞求您的网站被黑客入侵。那,将用户数据插入你的数据库而不检查它......
  • @miken32 托管服务器所有者不想更新他们的 PHP,我不能在我家这样做。 :(

标签: php mysql sql-update sql-insert


【解决方案1】:

您应该使用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");
}

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

【讨论】:

  • 使用 PDO 进行安全查询的方法很有用,在检查我的代码后我发现问题出在 SQL 语句中,我的表名是,例如“Categories”,在我的代码中是“类别”,问题是在 XAMPP 中可以正常工作但在服务器中无法正常工作的上部 C。
猜你喜欢
  • 2016-02-04
  • 2018-09-23
  • 1970-01-01
  • 2016-07-26
  • 2021-02-23
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多