2013-10-11 2 views
0

У меня есть следующий базовый запрос, который выбирает PIN-код из таблицы, привязывает его к переменной и затем удаляет ее из таблицы.Базовый выбор и удаление в MySQL (PDO)

$sth = $this->db->query("SELECT available_pins FROM pin_list ORDER BY RAND() LIMIT 0,1 ;"); 
$pinarray = $sth->fetch(); 
$this->user_pin = $pinarray->available_pins; 

$sth = $this->db->prepare("DELETE FROM pin_list WHERE available_pins = ? LIMIT 0,1"); 
$sth->execute(array($this->user_pin)); 

Моя проблема: PIN-код выбран и эхо-сигнал отлично, но он не удаляется из таблицы. Что я делаю не так?

Также, как бы лучше всего добавить оператор if, чтобы поймать ошибку в каждом из этих двух случаев?

+0

, если вы установите PDO режим исключения для, он будет возвращать логическое значение ложь для поэтому, '$ result = $ sth-> execute (..) или die ($ this-> db :: errorInfo), что-то должно помочь. –

ответ

1

У вас есть синтаксическая ошибка в синтаксисе DELETE. LIMIT не имеет аргумента смещения для DELETE.

+0

Спасибо, какой правильный синтаксис? – alias51

+0

@ alias51 просто оставьте смещение. 'LIMIT 1' –

0

При выборе кортежа разверните его, чтобы включить ПК. После того как вы привязали свой атрибут к переменной, вы можете удалить кортеж, присвоив where-clause с помощью PK.

Вот пример. Увы, пример написан в процедурной PHP, я не кодировал OO-php уже некоторое время. Извини за это. Тем не менее, я думаю, основная идея передана. Пожалуйста, дайте мне знать иначе.

Учитывая, что база данных выглядит следующим образом:

CREATE TABLE `pin_list` (
`id` INT(11) NOT NULL AUTO_INCREMENT , 
`available_pins` CHAR(8) NOT NULL , 
`aux` VARCHAR(14) NOT NULL , 
PRIMARY KEY (`id`) 
) ENGINE = MYISAM ; 

mysql> select * from pin_list; 
+----+----------------+-----+ 
| id | available_pins | aux | 
+----+----------------+-----+ 
| 1 | 43236543  | f | 
| 2 | 43236523  | f | 
| 3 | 43266523  | f | 
| 4 | 48266523  | f | 
| 5 | 48264823  | f | 
+----+----------------+-----+ 
5 rows in set (0.00 sec) 

РНР-скрипт может быть записан следующим образом:

mysql_connect('mysql_server','user-id','pwd'); 
mysql_select_db('database-name'); 

//Select the available pin and its PK. 
$query = "SELECT id, available_pins FROM pin_list ORDER BY RAND() LIMIT 0,1"; 

$rs = mysql_query($query); 

//Select id and available_ping into an array 
$pinarray = mysql_fetch_array($rs); 

echo "The pin: " . $pinarray[1]; //Do something with it 

//Save the primary key (PK, here: the id-attribute) for use in delete statement 
$pk = $pinarray[0]; 

//Now: delete the pin that you have fetched from the database 
echo "DELETE FROM pin_list WHERE id = " . $pk; //echo to debug sql-statements in php. 
//Uncomment to delete 
//$del_qry = "DELETE FROM pin_list WHERE id = " . $pk; 
//mysql_query($del_qry) 
+0

, пожалуйста, укажите больше кода – Zim84

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