0

テーブルから PIN を選択し、それを変数にバインドして、テーブルから削除する次の基本的なクエリがあります。

$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 が選択され、正常にエコーされますが、テーブルから削除されません。私は何を間違っていますか?

また、これら 2 つのケースのそれぞれでエラーをキャッチするには、if ステートメントをどのように追加すればよいでしょうか?

4

2 に答える 2

1

構文に構文エラーがありDELETEます。 LIMITには のオフセット引数がありませんDELETE

于 2013-10-11T19:22:28.107 に答える
0

タプルを選択するときは、展開して PK を含めます。属性を変数に関連付けた後、WHERE 句を 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)

PHP スクリプトは次のように記述できます。

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 )
于 2013-10-11T19:39:26.043 に答える