1
$result = $db->query("SELECT 1 FROM mxscript_slayer_licensekeys 
                      WHERE `username` = '$user'");
$result1 = $db->query("SELECT 1 FROM mxscript_slayer_licensekeys 
                       WHERE `hardwareID` = '$id'");

if (($result && $result->fetch(PDO::FETCH_NUM) > 0) 
    && ($result1 && $result1->fetch(PDO::FETCH_NUM) > 0)) {
    echo '1';
    exit;
} else {
    echo '2';
    exit;
}

resultデータベースに行として存在するかどうかを検出しようとしresult1ていますが、1 をエコーする必要があるときに 2 をエコーし​​ているため、何が間違っているのか疑問に思っていました。すべてのデータと投稿を再確認しました。 .

前もって感謝します。

4

1 に答える 1

-1

まず、準備済みステートメントとパラメーター バインディングを使用する必要があります。次に、2 つのクエリを発行する理由がわかりません。2 つの条件を 1 つのWHERE句に組み合わせるだけです。例えば...

// enable error reporting and exception errors in PDO
error_reporting(E_ALL);
ini_set('display_errors', 'On');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $db->prepare('SELECT COUNT(1) FROM mxscript_slayer_licensekeys WHERE `username` = ? AND `hardwareID` = ?');
$result->bindParam(1, $user);
$result->bindParam(2, $id);
$result->execute();

printf('%d row(s) found for username "%s" and hardwareID %s',
    $result->fetchColumn(), $user, $id);
exit;

アップデート

あなたのコードは特に効率的でも安全でもありませんが、なぜ期待どおりに機能しないのかわかりません。もっと情報が必要です。

于 2013-07-23T02:55:11.477 に答える