2013-03-12 2 views
1

У меня есть несколько форм, которые удаляют различные строки из таблицы, которую пользователь просматривает. Я использую MYSQL и PHP. У меня такой же код ниже (насколько я могу сказать) на другой странице, и он отлично работает. По какой-то причине я не могу выполнить мой код. Это приводит к ошибке с ошибкой обновления.Удалить из таблицы MYSQL

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" />'; 

?> 

Фатальная ошибка: Uncaught исключение 'PDOException' с сообщением 'SQLSTATE [42000]: Ошибка синтаксиса или нарушение прав доступа: 1065 Запрос был пустой' в delete_equipment.php: 16 трассировки стека: # 0 delete_equipment.php (16): PDO-> подготовить ('') # 1 {главный} выброшен indelete_equipment.php на линии 16

VarDump для equipmentID строки (8) "E1202612"

+0

Это использование PDO? Если да, то что делает 'var_dump ($ statement-> errorInfo());' производят, если вызывается выше 'die()'? – FoolishSeth

+1

Почему вы называете «htmlspecialchars»? Это используется для рендеринга вывода, а не для URI (которые используют совершенно разные кодировки, которые PHP декодирует для вас за кадром). Вместо этого вы хотите использовать 'intval' (при условии, что' equipmentID' является целым числом). – Dai

+0

Каков тип вашего '$ statement'? Если это mysqli_statement, метод execute не принимает никаких параметров: http://www.php.net/manual/en/mysqli-stmt.execute.php. Может быть, вы должны использовать '?' символ внутри запроса (вместо: yourId) и использовать '$ statement-> bind_param (" i ", intval ($ your_id));' перед вызовом 'execute()' – MatRt

ответ

1

Изменить

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

в

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

UPDATE: Включите исключение метания и отключить эмуляцию подготовки.

$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"); 
+0

не исправить проблему. –

+0

У вас есть ошибки? – peterm

+0

такой же ошибка как раньше. –

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 определен в другом файле?

Смежные вопросы