2017-02-24 7 views
0

誰でもここにエラーを見つけられますか?もう一度尋ねて申し訳ありませんが、私はここで新しいので、投稿時に何をすべきかについてはあまりよく分かりませんでした。勝利チケットを選ぶ際の配列エラー。

私はエラーがここに

$stmt = $db->prepare('SELECT `steamid64` FROM `giveawayusers` WHERE `from` <= :winningticket AND `to` >= :winningticket AND `giveawayid`=:id'); 

私のデータベース構造が似ているかもしれないと信じて

$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(); 

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つ必要です。 –

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はエラーを投げています(準備していない)、エラーメッセージに不正な数のバインドされたパラメータが含まれていると思われます」または@TopCheeseコメントに言及して、正確なエラーメッセージ、我々が観察する行動ではなく、漠然とした一般化を説明するときに。


executeが成功した場合には、エラーの原因ではない場合、それはのために有効ですその場合、質問に表示されているコードがどのように「配列エラー」をスローするのかわかりません。

+0

Re:PDO :: ATTR_EMULATE_PREPARESがtrue(デフォルト設定である)に設定されていると、複数の名前付きバインドプレースホルダが可能です。 –

+0

バインドプレースホルダに一意の名前を使用することは、ATTR_EMULATE_PREPARESのいずれかの設定で有効です。私の好みはどちらの場合でも動作する文を書くことです。私は、PDO :: ATTR_EMULATE_PREPARESの設定を変更すると、SQL文を "中断"させるべきではないと思います。 – spencer7593

+0

ええ、私はその前提で自分自身と出会っているかもしれません。 –

関連する問題