0

最初のSQLクエリが機能するのに、2番目のSQLクエリがエラーをスローした理由を教えてください。整数値が原因で壊れる理由を見つけることができませんでした。

作品:

$SQL = "SELECT * FROM Users WHERE userName = $uname AND pass = $pword";

エラー:

$SQL = "SELECT * FROM Users WHERE userName = $uname AND firstLogin = 1";

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND firstLogin = 1' at line 1

また、追加の悟りがある場合は、すべての耳に提供する必要があります。

PDOを使用して機能的な接続を表示するように編集:

<?php
    $uname = "userNameToSearchBy";

//PDO connection string 
    $user_name = "dbUsername";
    $pass_word = "dbPass";
    $database = "sdName";
    $server = "dbServer";
    $db = new PDO("mysql:host=".$server.";dbname=".$database.";", $user_name, $pass_word);
    $stmt = $db->prepare("SELECT * FROM Users WHERE userName=? AND firstLogin=?");
    $stmt->execute(array($uname, 1));
    //Returns the rows from thge database that match the query
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    //Shows the number of rows returned
    $message = $stmt->rowCount();   
?>
<body>
<?php echo $message ?>
</body>

SQL基準に一致する行数を出力します

4

3 に答える 3

1

関数、非推奨のmysql_quote_smart()関数を削除し、代わりに PDO 準備済みステートメントを使用してください。これにより、コードベースのセキュリティと品質を向上させながら問題を解決できるはずです。

これに関する詳細を示す標準的なコメントがあります。特に、最後にある PDO チュートリアルを確認してください。

新しいコードに mysql_* 関数を使用しないでください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが見えますか? 代わりに、準備済みステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決められない場合は、この記事を参考にしてください。学習したい場合は、ここに良い PDO チュートリアルがあります。

于 2012-08-18T22:56:26.767 に答える
0

SQLステートメントをエコーし​​てみてください

$SQL = "SELECT * FROM Users WHERE userName = $uname AND firstLogin = 1";
echo($SQL);

に何か問題がある可能性があり$unameます。空の場合は取得します

$SQL = "SELECT * FROM Users WHERE userName = AND firstLogin = 1";

構文エラーがあります。

$unameこのように引用符を配置することもできます

$SQL = "SELECT * FROM Users WHERE userName = '$uname' AND firstLogin = 1";

一重引用符もある場合$uname、それも問題を引き起こす可能性があります

于 2012-08-18T22:47:45.170 に答える
0

$uname... をクォートするか、値を mysql_real_escape() に渡してみてください

于 2012-08-18T22:50:09.150 に答える