我有这个脚本删除网站上的某张图片。它是用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);
}
答案 0 :(得分:3)
修改强>
“没有php错误并添加error_reporting(E_ALL);也没有显示任何错误。”
正如我在文章中所说,你需要在($sql, $con)
周围切换这些变量($con, $sql)
。
然后这个:
$con = mysqli_connect('WEBSITE.mysql', 'WEBSITE', 'PASS');
只使用第4个参数而不是mysqli_select_db("WEBSITE");
,而不是将连接变量传递给。{/ p>
$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()
:
混合mysql_query(字符串$ query [,resource $ link_identifier = NULL]
mysqli_query()
:
混合mysqli_query(mysqli $ link,字符串$ query [,int $ resultmode = MYSQLI_STORE_RESULT])