2016-10-18 7 views
1

ich den folgenden Code zu verwenden, versuchen:Lösch-Abfrage funktioniert nicht über php gU

$Q = DBCon::getCon()->prepare('SELECT * FROM `'.$language['data_table_name'].'` WHERE `id`=:id'); 
$Q->bindValue(':id', $recordId, PDO::PARAM_INT); 
$Q->execute(); 
var_dump($Q); 
var_dump($recordId); 
var_dump($Q->fetch(PDO::FETCH_ASSOC)); 

$Q = DBCon::getCon()->prepare('DELETE FROM `'.$language['data_table_name'].'` WHERE `id`=:id'); 
$Q->bindValue(':id', $recordId, PDO::PARAM_INT); 
$Q->execute(); 
var_dump($Q); 
var_dump($recordId); 

, die folgenden Daten via var_dump erzeugt:

object(PDOStatement)[6] 
    public 'queryString' => string 'SELECT * FROM `project_nl` WHERE `id`=:id' (length=41) 

string '5' (length=1) 

array (size=4) 
    'id' => int 5 
    'name' => string 'test' (length=4) 
    'description' => string 'test' (length=4) 
    'big_image' => string 'test' (length=4) 

object(PDOStatement)[6] 
    public 'queryString' => string 'DELETE FROM `project_nl` WHERE `id`=:id' (length=39) 

string '5' (length=1) 

Welche soll, soweit ich wissen, löschen Sie den Datensatz, in dem id5 aus der folgenden Tabelle entspricht:

|Table name: project_nl    | 
--------------------------------------- 
| id | name | description | big_image | 
--------------------------------------- 
| 1 | test | test  | test  | 
| 5 | test | test  | test  | 

Das Codeelement löscht jedoch tatsächlich nichts. Es wirft auch keine Fehler/Ausnahmen auf.

Wenn ich jedoch die Abfrage von der var_dump kopieren und in phpMyAdmin einfügen, wird die Zeile gelöscht.

Auch das Skript ist voll von insert, update und select Abfragen, die alle gut funktionieren. Es ist nur DELETE, die überhaupt nichts tun.

+0

Warum binden Sie es explizit als PARAM_STR und nicht als _INT? Ist es keine numerische Spalte? Erhalten Sie Ergebnisse, wenn Sie DELETE für SELECT in diesem Codeabschnitt wechseln? – mario

+0

@mario Ich habe es in 'PARAM_INT' geändert und eine' select' Abfrage mit der Ausgabe hinzugefügt. –

+0

Vielleicht eine hängende Transaktion? Andernfalls versuchen Sie anstelle einer vorbereiteten Anweisung eine einfache Abfrage zu verwenden - zum Testen. – mario

Antwort

0

Ich deaktivierte Auto Commit, und startete nicht noch eine Transaktion.

-1
<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDBPDO"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    // sql to delete a record 
    $sql = "DELETE FROM MyGuests WHERE id=3"; 

    // use exec() because no results are returned 
    $conn->exec($sql); 
    echo "Record deleted successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 
?> 
Verwandte Themen