2016-10-18 4 views
1

Я пытаюсь использовать следующий код:удаления запроса не работает через PHP PDO

$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); 

, который генерирует следующие данные через var_dump:

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) 

, который должен, насколько я знать, удалить запись, где id равно 5 из следующей таблицы:

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

Однако кусок кода фактически ничего не удаляет. Он также не вызывает ошибок/исключений.

Когда я, однако, скопирую запрос из var_dump и вставляю его в phpMyAdmin, строка удаляется.

Кроме того, сценарий полон рабочих insert, update и select запросов, которые все работают нормально. Это всего лишь DELETE, который ничего не делает.

+0

Почему вы явно связываете его как PARAM_STR, а не _INT? Разве это не числовая колонка? Получаете ли вы какие-либо результаты при переключении DELETE для SELECT в этом разделе кода? – mario

+0

@mario Я изменил его на 'PARAM_INT' и добавил запрос' select' с его результатом. –

+0

Возможно, оборванная сделка? Попробуйте использовать простой запрос, а не готовый оператор - для тестирования. – mario

ответ

0

Я отключил автоматическую фиксацию и не начал и не совершил транзакцию.

-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; 
?> 
Смежные вопросы