2017-02-24 50 views
0

任何人都可以在這裏發現任何錯誤?對不起再次提問,但我是新來的,不太確定發佈時該怎麼做。挑選中獎券時陣列錯誤。

$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

乾杯, 詹姆斯

+0

你有什麼錯誤之處?我不確定這裏有什麼問題。 – TopCheese

+0

未選中勝者。看看skin-room.com,你就會明白 –

+0

所以你從查詢中得到一個空的結果? – TopCheese

回答

0
WHERE `from` >= :winningticket AND `to` <= :winningticket 
+1

只有代碼的答案質量很低,並且是刪除的候選人。需要至少有一個句子描述你正在回答的問題以及這個問題如何回答。 –

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是拋出錯誤(不是準備),我期望錯誤消息包括提及一個無效數量的綁定參數「或類似的東西,我們應該包括確切錯誤信息說明我們觀察到的行爲,而不是一個一般化的時候。


如果這不是錯誤的原因,如果execute是成功的,那麼作爲@TopCheese提到了一個評論,它是有效的一個查詢執行返回一個空的結果集,在這種情況下,我看不出如何在問題中顯示的代碼將拋出一個「數組錯誤」

+0

Re:多次命名綁定佔位符 - 如果PDO :: ATTR_EMULATE_PREPARES設置爲true(這應該是默認設置),這是可能的。 –

+0

使用唯一名稱作爲綁定佔位符對ATTR_EMULATE_PREPARES的設置有效。我的首選是寫一個適用於這兩種情況的聲明。我不認爲改變PDO :: ATTR_EMULATE_PREPARES的設置應該「破壞」一條SQL語句。 – spencer7593

+0

是的,我可能會用這個假設跟自己約會。 –