1

ユーザーが表示しているテーブルからさまざまな行を削除するフォームがいくつかあります。私は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" />'; 

?>

致命的なエラー:キャッチされない例外「PDOException」とメッセージ「SQLSTATE [42000]:構文エラーまたはアクセス違反:1065クエリが空でした」delete_equipment.php:16スタックトレース:#0 delete_equipment.php(16):PDO-> prepare( '')#1{main}が16行目にindelete_equipment.phpをスローしました

機器ID文字列(8)「E1202612」のVarDump

4

2 に答える 2

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");
于 2013-03-12T04:04:21.003 に答える
0
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->prepare()

$delete_equipment_singleあなたのコードから、別のファイルで定義されているように見えますか?

于 2013-03-12T06:22:59.700 に答える