私は自分のローカルマシンで開発しているphpサイトを作っています。これは本当に初めてなので、これは私が今まで試みた最初のことです。ホストに移動すると、次のエラーが表示されます。
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'matthew'@'localhost' (using password: NO) on line 11
ここでかなり検索しましたが、クエリを「準備」する必要があるため、それはかなり確信しています。私が確信が持てないのは、いつ準備するのが正しいのか、いつ準備しないのかということです。詳細を説明するために、いくつかのクエリを以下に追加しました。
データベースへの接続:
$hostname = "localhost";
$username = "root";
$password = "root";
try {
$dbh = new PDO("mysql:host=$hostname;dbname=wmpt", $username, $password);
//echo "Connected to database"; // check for connection
}
catch(PDOException $e)
{
echo $e->getMessage();
}
クエリの例を次に示します。
$username = mysql_real_escape_string($_POST['run']);
$STH = $dbh->query("SELECT * FROM tblusers WHERE username = '$username' ");
$STH->setFetchMode(PDO::FETCH_ASSOC);
$result = $STH->fetch();
私の質問は、ユーザーが送信したデータを使用して DB をクエリ/挿入/更新する場合にのみ、クエリを「準備」する必要がありますか?
上記のクエリは悪い習慣ですか? ユーザーが送信したデータが含まれていない場合、つまり、クエリを実行したい場合
$STH = $dbh->query("SELECT * FROM tblusers WHERE username LIKE '%hotmail%' ");
これはおそらく悪い例ですが、開発者が定義したクエリを示しています。
これが私が得る理由ですか、どうすれば回避できますか:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'matthew'@'localhost' (using password: NO) on line 11