2013-10-11 2 views
0

У меня есть список шестизначных контактов. Я хочу вытащить один вывод из списка наугад и сохранить его в переменной $ user_pin, а затем удалить этот PIN-код из списка.Как сохранить переменную в PDO

У меня есть следующий старт (PDO), но не знаю, как хранить переменную:

Выберите пин:

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

Удалить Пин:

$sth = $this->db->prepare("DELETE FROM pin_list WHERE available_pins = ?""); 

Любые идеи ?

+0

Вы действительно не должны использовать 'ORDER BY RAND()' в MySQL. Это очень плохой способ выбрать случайную строку из таблицы. Для получения дополнительной информации см. [This] (http://stackoverflow.com/a/9792115/727208) и [это] (http://stackoverflow.com/a/9946238/727208) ответ. –

ответ

1

Вы забываете выполнить ваш запрос, вы только подготавливая его:

try { 
    // Used this method since you don't have to prepare any variable 
    $sth = $this->db->query("SELECT available_pins FROM pin_list ORDER BY RAND() LIMIT 0,1 ;"); 
    $pinarray = $sth->fetch(); 

    // Used this method since you can prepare the variable. In this situation it'd be pretty safe even chaining them though 
    $sth = $this->db->prepare("DELETE FROM pin_list WHERE available_pins = ? LIMIT 0,1"); 
    $sth->execute(array($pinarray['available_pins'])); 
    } 
catch(PDOException $e) { 
    echo "There was an error: " . $e->getMessage(); 
    } 

Также была опечатка в команде удаления. ПРЕДУПРЕЖДЕНИЕ в запросах DELETE никогда не бывает плохой идеей.

+2

«Спецификация LIMIT строки_команды, специфичная для MySQL». Я бы предпочел не научить людей использовать параметры, специфичные для MySQL ... лучше использовать ИМО для использования ANSI SQL. – chx

+0

И я только что узнал что-то новое. Спасибо @chx –

+0

@FranciscoPresencia спасибо, $ pinarray все еще появляется как неопределенная ошибка. SQL-запрос работает нормально, когда я запускаю его в phpmyadmin. Я делаю что-то неправильно? Должен ли я использовать $ this-> pinarray? – alias51

0

Выбрать:

$sth = $this->db->prepare("SELECT available_pins FROM pin_list ORDER BY RAND() LIMIT 0,1 ;"); 
$result = $sth->execute(); 

Получить:

$user_pin = $result->fetchColumn(); 

Удалить:

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

Это является процес s на ОЧЕНЬ базовом уровне, конечно, вы захотите выполнить некоторую проверку ошибок между каждым шагом, чтобы убедиться, что каждый запрос был успешным и что вы получили правильные данные.

+0

@aothanks, почему мой $ user_pin объявлен как недоработанный, когда я пытаюсь его повторить? – alias51

+0

, вероятно, потому, что ваш запрос выбора не был успешным, убедитесь, что он работает, и что вы на самом деле получаете данные ... вот ОЧЕНЬ полезно ссылка для PDO, которую я по-прежнему часто ссылаюсь: http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers –

+0

попробуйте обновленный код –

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