有人可以在这里发现任何错误吗?很抱歉再次询问,但我在这里是新来的,并且不确定发布时该怎么办。
$stmt = $db->prepare('INSERT INTO `giveawayusers` (`giveawayid`, `steamid64`, `coins`, `from`, `to`) VALUES (:id, :id64, :coins, :from, :to)');
$stmt->execute(array(
":id" => $id,
":id64" => $steamUserId,
":coins" => $coins,
":from" => $currentCoins,
":to" => $totalCoins,
));
if($currentCoins+$coins>=$totalCoins)
{
$winningticket = mt_rand(1,$totalCoins);
$stmt = $db->prepare('SELECT `steamid64` FROM `giveawayusers` WHERE `from` <= :winningticket AND `to` >= :winningticket AND `giveawayid`=:id');
$stmt->bindValue(':id', $id);
$stmt->bindValue(':winningticket', $winningticket);
$stmt->execute();
$winner = $stmt->fetch();
我相信错误可能在这里
$stmt = $db->prepare('SELECT `steamid64` FROM `giveawayusers` WHERE `from` <= :winningticket AND `to` >= :winningticket AND `giveawayid`=:id');
我的数据库结构就像:
https://gyazo.com/4ec4874d879b2cf4bd1d2450e57cfa71https://gyazo.com/95cddb0a1c7b8fd1c360a6d5a1b2e129
欢呼,詹姆斯
我不相信我们可以在准备好的语句中多次引用命名绑定占位符。(在PDO的较早版本中,这是正确的,不确定是否已在您正在运行的版本中修复。)
我建议使用 unique 绑定占位符名称。可以为多占位持有人提供相同的价值。例如:
$stmt = $db->prepare('SELECT `steamid64` FROM `giveawayusers`'
. ' WHERE `from` <= :winningticket1'
. ' AND `to` >= :winningticket2'
. ' AND `giveawayid` = :id'
);
$stmt->bindValue(':winningticket1', $winningticket);
$stmt->bindValue(':winningticket2', $winningticket);
$stmt->bindValue(':id', $id);
$stmt->execute();
但是,如果这是问题,那么我不会将观察到的行为描述为"数组错误"。
该描述相当模糊,并且误导不精确。如果这是发生错误的原因,那么 execute
引发了错误(不是准备),我希望错误消息包括提及一个无效的绑定参数"或类似的内容。我们应该包括<<<<<<<<<<em>当描述我们观察到的行为时而不是模糊的概括时,em> extcent 错误消息。
如果这不是造成错误的原因,则如果execute
成功,则正如@Topcheese在评论中提到的那样,查询执行返回空结果集是有效的。在这种情况下,我看不出问题中显示的代码将如何抛出"数组错误"。
WHERE `from` >= :winningticket AND `to` <= :winningticket