选中中奖票时出现数组错误。

时间:2017-02-24 20:55:02

标签: javascript php jquery mysql arrays

有人能发现任何错误吗?很抱歉再次询问,但我是新来的,并不太确定在发布时该怎么做。

$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/4ec4874d879b2cf4bd1d2450e57cfa71 https://gyazo.com/95cddb0a1c7b8fd1c360a6d5a1b2e129

干杯, 詹姆斯

2 个答案:

答案 0 :(得分:1)

我不相信我们被允许在预准备语句中多次引用命名绑定占位符。 (在早期版本的PDO中也是如此,不确定在您运行的版本中是否已修复此问题。)

我建议使用唯一绑定占位符名称。可以为多个占位符提供相同的值。举个例子:

    $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抛出错误(而不是准备),我希望错误消息包括提到无效数量的绑定参数“或类似的东西。我们在描述我们观察到的行为时应该包含 exact 错误消息,而不是模糊的概括。

如果这不是错误的原因,如果execute成功,那么@TopCheese在注释中提到,它对于返回空结果集的查询执行是有效的。在这种情况下,我没有看到问题中显示的代码如何抛出“数组错误”。

答案 1 :(得分:0)

 WHERE `from` >= :winningticket AND `to` <= :winningticket