PHP 言語の開発プロセス中、SQL エラーとパフォーマンスの問題は比較的一般的な問題です。この記事では、これらの問題を2つの側面から回避する方法を紹介します。
SQL エラーを回避する
プリペアド ステートメントは、SQL クエリ文字列とパラメーターを分離する手法です。プリペアド ステートメントを使用すると、コンパイルが 1 回だけ必要となるため、SQL インジェクション攻撃を回避し、クエリの実行効率を向上させることができます。
次に、プリペアド ステートメントの使用例を示します。
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = ?'); $stmt->execute([$username]);
この例では、SQL クエリ文字列内の変数は疑問符プレースホルダーを使用して表され、パラメータはステートメントとして実行するために渡されます。配列()メソッド。
SQL クエリ文字列を動的に生成する場合は、SQL インジェクション攻撃が容易に発生する可能性があるため、文字列の直接結合を避けるようにしてください。これを回避するには、PDO プリペアド ステートメントを使用し、パラメーターをバインドします。
SQL 文字列の結合を回避する例を次に示します:
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $stmt->execute(['username' => $username]);
この例では、PDO はコロンとパラメーター名を使用して疑問符プレースホルダーを置き換え、パラメーターをフォームに関連付けます。配列の値は、execute() メソッドに渡されます。
ユーザー入力を受け入れて SQL クエリに入力する前に、入力されたデータが期待どおりであることを確認するためにフィルタリングと検証を行う必要があります。フィルタリングや検証にはカスタム関数だけでなく、strip_tags() や htmlspecialchars() などの PHP 独自の関数も使用できます。
次は簡単な例です。この例では、ユーザー名に文字と数字のみが含まれているかどうかを確認します:
if (!ctype_alnum($username)) { // 非法用户名 }
以上がPHP 言語開発における SQL エラーやパフォーマンスの問題を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。