gpt4 book ai didi

php - 将 Mysql 函数更改为 Mysqli 会破坏脚本

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:59 25 4
gpt4 key购买 nike

我有这个脚本可以从网站上删除某张图片。它是用 mysql 函数编写的,所以我想将它更新为 mysqli,但这样做会使脚本停止工作。没有显示来自脚本的死亡消息没有 php 错误并添加了 error_reporting(E_ALL);也不显示任何错误。

原始脚本:

    if(isset($_POST['F3Verwijderen']))
try
{
//delete the file
$sql = "SELECT PandFoto3 FROM tblpand WHERE `PK_Pand` = '".$pandid."'";

$con = mysql_connect('WEBSITE.mysql', 'WEBSITE', 'PASS');
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("WEBSITE");
$result = mysql_query($sql, $con);
while ($row = mysql_fetch_array($result)) {
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3'])) {
unlink($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3']);
} else {
echo $row['PandFoto3'];
}
}
//delete the path url from the database field
mysql_query("UPDATE tblpand SET PandFoto3 = NULL WHERE `PK_Pand` = '".$pandid."'");
mysql_close($con);


header('Location: ../admin/pand-aanpassen.php?id='.$pandid);
}

更新到 mysqli:

try 
{
//delete the file
$sql = "SELECT PandFoto3 FROM tblpand WHERE `PK_Pand` = '".$pandid."'";

$con = mysqli_connect('WEBSITE.mysql', 'WEBSITE', 'PASS');
if (!$con) {
die('Could not connect: ' . mysqli_error());
}
mysqli_select_db("WEBSITE");
$result = mysqli_query($sql, $con);
while ($row = mysqli_fetch_array($result)) {
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3'])) {
unlink($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3']);
} else {
echo $row['PandFoto3'];
}
}
//delete the path url from the database field
mysqli_query("UPDATE tblpand SET PandFoto3 = NULL WHERE `PK_Pand` = '".$pandid."'");
mysqli_close($con);


header('Location: ../admin/pand-aanpassen.php?id='.$pandid);
}

最佳答案

编辑:

"no php errors and adding error_reporting(E_ALL); doesn't show any errors either."

  • 那是因为这不是 PHP 问题,而是 MySQL 问题。
    • 它们完全是两种不同的动物。

正如我在评论中所说,您需要围绕 ($con, $sql) 切换这些变量 ($sql, $con)

然后这个:

$con = mysqli_connect('WEBSITE.mysql', 'WEBSITE', 'PASS');

只需使用第 4 个参数,而不是 mysqli_select_db("WEBSITE"); 您没有将连接变量传递给的地方。

$con = mysqli_connect('WEBSITE.mysql', 'WEBSITE', 'PASS', 'WEBSITE');

语法是:

  • 主持人
  • 用户名
  • 密码(如果有的话)
  • 数据库

您还可以完成 mysqli_select_db($con, "WEBSITE");

旁注:在 mysql_ (见脚注) 中,连接最后出现,这与 mysqli_ 中的连接最先不同。

对您的 UPDATE 执行相同操作并首先传递连接参数。

mysqli_query($con, "UPDATE...

旁注:要验证更新是否真的成功,请使用 affected_rows()

另一件事,mysqli_error() 需要连接到它 mysqli_error($con) 并检查您的查询是否有错误。

即:

$result = mysqli_query($con, $sql) or die(mysqli_error($con));

引用资料:

旁注:

您正在使用 try() 但没有使用 catch()。要么删除它,要么查阅手册:

从手册中提取的示例 #4:

<?php
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
}
return 1/$x;
}

try {
echo inverse(5) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} finally {
echo "First finally.\n";
}

try {
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} finally {
echo "Second finally.\n";
}

// Continue execution
echo "Hello World\n";
?>

最后的笔记:

您现在的密码是开放给SQL injection .使用 prepared statements , 或 PDO with prepared statements它们更安全


脚注:(MySQL 和 MySQLi 比较)

关于mysql_query():

mixed mysql_query ( string $query [, resource $link_identifier = NULL ]

对于mysqli_query():

mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

关于php - 将 Mysql 函数更改为 Mysqli 会破坏脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31999170/

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