【发布时间】:2013-03-12 03:22:52
【问题描述】:
我有几个表单可以从用户正在查看的表中删除不同的行。我正在使用 MYSQL 和 PHP。我在另一个页面上有相同的代码(据我所知),它工作正常。由于某种原因,我无法让我的代码执行。它给出了更新失败的错误。
try
{
$db = new PDO('mysql:host=$hname;dbname=' . $DBname, $DBusername, $DBpassword, array(PDO::ATTR_PERSISTENT => true));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch ( Exception $ex )
{
die ( 'Cannot Connect to the Database.' );
}
$delete_equipment_single = "DELETE FROM EquipmentItem
WHERE equipmentID = :equipmentID";
equipment_delete.php
<?php require_once('php/security.php'); ?>
<?php
// Get the ID Tag
if( !isset($_GET['equipmentID'] ))
{
echo "You Didn't Supply a equipmentID - (equipmentID) [ERROR x1]";
exit();
}
require_once('php/database.php');
$equipmentID = htmlspecialchars($_GET['equipmentID']);
// Delete the Equipment
$statement = $db->prepare($delete_equipment_single);
$result = $statement -> execute(array(
':equipmentID' => $equipmentID
));
// Make Sure Everything Worked
if( $result == false )
{
die('Update Failed, Please Check Your Database. [ERROR x2]');
}
echo '<meta http-equiv="Refresh" Content="0; url=display_equipment.php?a=1" />';
?>
致命错误: 在 delete_equipment.php:16 堆栈跟踪:#0 delete_equipment 中未捕获异常“PDOException”,并带有消息“SQLSTATE[42000]:语法错误或访问冲突:1065 查询为空”。 php(16): PDO->prepare('') #1 {main} 在第 16 行抛出 indelete_equipment.php
VarDump 用于设备 ID 字符串 (8) "E1202612"
【问题讨论】:
-
这是使用 PDO 吗?如果是这样,如果在上面调用
die(),var_dump($statement->errorInfo());会产生什么? -
你为什么打电话给
htmlspecialchars?这用于渲染输出,而不是用于 URI(完全使用不同的编码,PHP 在幕后为您解码)。您可能想改用intval(假设equipmentID是一个整数)。 -
你的
$statement是什么类型的?如果是 mysqli_statement,则执行方法不带任何参数:php.net/manual/en/mysqli-stmt.execute.php。也许你应该使用'?查询中的字符(而不是:yourId),并在调用execute()之前使用$statement->bind_param("i", intval($your_id)); -
我正在使用 pdo 但我知道这不是连接问题。 EquipmentItem 是表,除了这个删除之外,我在编辑这些数据时没有遇到任何其他问题。