如何在 PDO 中存储变量 [关闭]
Posted
技术标签:
【中文标题】如何在 PDO 中存储变量 [关闭]【英文标题】:How to store a variable in PDO [closed] 【发布时间】:2013-10-11 18:02:09 【问题描述】:我有一个 6 位密码列表。我想从列表中随机抽取一个 pin 并将其存储在变量 $user_pin 中,然后从列表中删除该 PIN。
我有以下开始(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 = ?"");
有什么想法吗?
【问题讨论】:
你真的不应该在 mysql 中使用ORDER BY RAND()
。从表中选择随机行是一种非常糟糕的方法。有关详细信息,请参阅 this 和 this 答案。
【参考方案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 查询中的 LIMIT 绝不是一个坏主意。
【讨论】:
“MySQL 特定的 LIMIT row_count 选项”我宁愿不教人们使用 MySQL 特定的选项……IMO 最好使用 ANSI SQL。 我刚刚学到了一些新东西。谢谢@chx @FranciscoPresencia 谢谢,$pinarray 仍然作为未定义的错误出现。当我在 phpmyadmin 中运行 SQL 查询时,它运行良好。难道我做错了什么?我应该使用 $this->pinarray 吗? 否,因为该变量的范围在同一个方法中。我添加了一个 try/catch 语句,以便您可以尝试并告诉我们给定的错误是什么,以防您在编辑后无法自行解决。 这适用于选择,但不会发生删除。没有产生错误: $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;【参考方案2】:选择:
$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));
这是一个非常基本的过程,当然您需要在每个步骤之间进行一些错误检查,以验证每个查询是否成功并且您收到了正确的数据。
【讨论】:
@a.o.thanks,为什么我的 $user_pin 在我尝试回显时被声明为欠精细? 可能是因为您的选择查询不成功,请验证它是否有效,并且您实际上正在接收数据...这是一个非常有用的 PDO 链接,我仍然经常参考:wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers 这会产生致命错误:在非对象上调用成员函数 fetchColumn()? 那么您的选择查询不起作用 好的,谢谢。如果我使用 $this->user_pin = 而不是 $user_pin = 会有区别吗?以上是关于如何在 PDO 中存储变量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章