2016-12-12 14 views
0

私はPDO SQLクエリを初めて利用しています。私はうまく動作する次のコードを持っています。結果が1行しか返されない場合は、その行をvalid = FALSE"に設定します。それ、どうやったら出来るの?結果からの新しいSQL PDOクエリ

$sql = "SELECT * FROM `passcodes` WHERE `passcode` = '$passcode' AND `valid` = TRUE"; 
$stmt = $DBcon->prepare($sql); 
$stmt->execute(); 
$count = $stmt->rowCount(); 
if($count == 1) { 
    //do this 
} else { 
    //do that 
} 
+2

あなたは既に 'prepare()'を使用しています - プレースホルダを変数に使用してSQLインジェクションを防止するのはなぜですか?つまり、カウントが1の場合、更新クエリを実行するだけです。 – Qirel

+0

[PDOを正しく使用する方法を理解してください](https://phpdelusions.net/pdo#prepared) –

+0

PDOはフレームワークではありません。 ORM。通常のSQLコードを実行するための単なるライブラリです。 –

答えて

1

私は、有効なにその行を設定したいです= 「FALSE。どのように私はそれを行うのですか?

これはSQLが何のためにあるのかである。

$sql = "UPDATE `passcodes` SET `valid` = FALSE WHERE `passcode` = ? AND `valid` = TRUE"; 
$DBcon->prepare($sql)->execute([$passcode]); 

これはすべて必要なコードです。

+0

"else do that"セクションはどうですか? – artoodetoo

+0

OPがそれを求めるならば、あなたも注意すべき明らかな解決策があります。 –

+0

@artoodetoo OpはSQLクエリーを更新したいだけです。あなたの理由は何ですか? –

-1

これは、結果の行数で動作しますが、私は準備された文のプレースホルダを使用することをお勧めします等しいまたは1より大きい :

$sql = "SELECT `id` FROM `passcodes` WHERE `passcode` = ? AND `valid` = TRUE"; 
$stmt = $DBcon->prepare($sql); 
$stmt->execute([ $passcode ]); 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
if($rows) { 
    //do this 
    $sql = "UPDATE `passcodes` SET `valid` = FALSE WHERE `id` = ?"; 
    $stmt = $DBcon->prepare($sql); 
    foreach ($rows as $r) { 
     $stmt->execute([ $r['id'] ]); 
    } 
} else { 
    //do that 
} 
+0

更新構文が間違っています。 –

+0

@MasivuyeCokileありがとうございます。固定 – artoodetoo

+0

*「else do that」のセクションはどうですか?*あなたの質問は誰かの回答であり、答えはどうですか? –

2

さらに別の解決策。

IF上記の「else」セクションに興味がある場合は、@ YourCommonSenseの洗練されたソリューションを組み合わせて、UPDATEで変更された行の量を確認できます。 MySQLはそのような情報を返します!

関連する問題