从 MYSQL 表中删除

Posted

技术标签:

【中文标题】从 MYSQL 表中删除【英文标题】:Delete from MYSQL Table 【发布时间】:2013-03-12 03:22:52 【问题描述】:

我有几个表单可以从用户正在查看的表中删除不同的行。我正在使用 mysqlphp。我在另一个页面上有相同的代码(据我所知),它工作正常。由于某种原因,我无法让我的代码执行。它给出了更新失败的错误。

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-&gt;errorInfo()); 会产生什么? 你为什么打电话给htmlspecialchars?这用于渲染输出,而不是用于 URI(完全使用不同的编码,PHP 在幕后为您解码)。您可能想改用 intval(假设 equipmentID 是一个整数)。 你的$statement是什么类型的?如果是 mysqli_statement,则执行方法不带任何参数:php.net/manual/en/mysqli-stmt.execute.php。也许你应该使用'?查询中的字符(而不是:yourId),并在调用execute()之前使用$statement-&gt;bind_param("i", intval($your_id)); 我正在使用 pdo 但我知道这不是连接问题。 EquipmentItem 是表,除了这个删除之外,我在编辑这些数据时没有遇到任何其他问题。 【参考方案1】:

改变

$result = $statement -> execute(array('equipmentID' => $equipmentID));

$result = $statement -> execute(array(':equipmentID' => $equipmentID));
                                       ^

更新:打开异常抛出并禁用准备模拟。

$db = new PDO('mysql:host=localhost;dbname=mydb;charset=UTF-8', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

UPDATE2:改变

$statement = $db->prepare($delete_equipment_single);

$statement = $db->prepare("DELETE FROM EquipmentItem WHERE equipmentID = :equipmentID");

【讨论】:

那没用,你有没有收到来自 PDO 的任何错误、警告或通知? 查看更新。转向抛出异常。让我们看看它会告诉你什么。也发帖var_dump($equipmentID); 用我的所有代码、来自 db 的错误和 var 转储更新了第一篇文章。感谢您的帮助和耐心。 好吧。说什么。所以我非常感谢你的帮助。我应该被枪杀/绞死,我的头痛是我自己的错。不知道如何,但我忘记了包含。【参考方案2】:
1065 Query was empty' in delete_equipment.php:16 
Stack trace: #0 delete_equipment.php(16): PDO->prepare('') 
  #1 main thrown indelete_equipment.php on line 16

这意味着您尝试准备的查询是空的。您可以通过运行来验证:

var_dump($delete_equipment_single) 紧接在 $db-&gt;prepare() 之前

从您的代码看来,$delete_equipment_single 是在不同的文件中定义的?

【讨论】:

以上是关于从 MYSQL 表中删除的主要内容,如果未能解决你的问题,请参考以下文章

使用聚合函数从 MySql 表中删除?

如何从mysql中的表中删除重复的行

如何从我的 MySQL 表中删除约束?

如何从 MySQL 中的表中删除列

通过android从MySQL表中删除行

如何从mysql5中的父表中删除数据?