ホームページ >バックエンド開発 >PHPチュートリアル >PHP データベースに関する小さな質問

PHP データベースに関する小さな質問

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-23 14:15:36922ブラウズ

PHP データベース ユーザー検証

$con=mysql_connect("localhost","root","123456");
if(!$con)
{
die('接続できませんでした:'.mysql_error ());
}
mysql_query("SET NAMES 'utf8'") // 文字セットを設定
mysql_select_db("manage",$con) // データベースを選択
$sql1="
select count(*);ユーザー
から、username=="".$_POST['name']."" およびpassword=="".$_POST['password'].""
LIMIT 1
";
$result=mysql_query($ sql1,$con);
赤い部分はエラーを報告します。先輩方、質問が 2 つあります。まず、現在の形式を正しくするには、どのように変更する必要がありますか?次に、ユーザー情報を確認するときはどうするのでしょうか。よりシンプルなタイプ。

ディスカッションに返信 (解決策)

$sql1="select count(*)from userwhere username='".$_POST['name']."' and password='".$_POST['password']."'LIMIT 1";


次に、mysql_num_rows を使用して行が 1 に等しいかどうかを判断します。

ユーザー名='".mysql_real_escape_string($_POST['name'])."' およびパスワード='".mysql_real_escape_string($_POST['password'])."


単純なアンチインジェクションを取るのが最善です。測定。

http://php.net/manual/en/function.mysql-real-escape-string.php

php5.5 以降の場合は、mysqli_real_escape_string() または PDO::quote() を使用します

$sql1 = "select count(*)from userwhere username='".$_POST['name']."' and password=='".$_POST['password']."'";

または

$sql1 = "select count(*)from userwhere username='$_POST[name]' and password='$_POST[password]'";

LIMIT 1 は必要ありません
group 句がないため、クラスタリング関数は 1 つのレコードのみを取得します

受信データをエスケープする必要があります プログラムエントリではこれで十分です
$_POST = array_map ('mysql_real_escape_string ', $_POST);

$_POST = array_map('mysql_real_escape_string', $_POST);


$_POST が空の場合、エラーが報告されますか?

'$_POST[name]' を SQL 内で直接使用しても大丈夫ですか?

通常、ISSET などで最初に判断する必要があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。