0

次のPHPコードを使用してMySQLテーブルに情報を追加しようとしています。(HTML5の基本的なWebフォームから名前とテキストを入力します。)おそらく構文の問題ですか?

<?php
include "dbinfo.php"; //contains mysqli_connect information (the $mysqli variable)
//inputs
$name = $_GET["name"];
$text = $_GET["text"];

$sqlqr = 'INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ("$name", "$text", CURRENT_TIMESTAMP);'; //the query. I'm pretty sure that the problem is a syntax one, and is here somewhere.

mysqli_query($mysqli,$sqlqr); //function where the magic happens.
?>

エラーはスローされません。空白の画面が表示され、「$name」と「$text」の行がMySQLテーブルに追加されます。

4

3 に答える 3

2

まず第一に、SQLインジェクション攻撃を防ぐためにmysqliプリペアドステートメントを使用する必要があります。適切にエスケープせずにクエリ内でユーザー入力を使用することは安全ではありません。プリペアドステートメントは、これを防ぐのに役立ちます。

次に、PHPで文字列の引用符がどのように機能するかを学習する必要があります。一重引用符で囲まれた文字列と、二重引用符で囲まれた文字列は異なります。

文字列の引用に関するPHPのドキュメントを読むことをお勧めします。

于 2013-03-26T16:57:32.230 に答える
1

コードは次のようになります(SQLインジェクション保護が追加されています)。

<?php
include "dbinfo.php"; //contains mysqli_connect information (the $mysqli variable)
//inputs
$name = mysqli_real_escape_string($_GET['name']);
$text = mysqli_real_escape_string($_GET['text']);

$sqlqr = "INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ('" . $name . "', '" . $text . "', CURRENT_TIMESTAMP);";

mysqli_query($mysqli,$sqlqr); //function where the magic happens.
?>

私がやったことを見てください。まず、取得しているユーザー入力を変数$name$text変数にエスケープしました(これはセキュリティ上の理由からほとんど必須です)。他の人が示唆しているように、プリペアドステートメントを使用することをお勧めします。

問題は、SQL構文の要件である一重引用符(')で文字列値を囲んでいないことです。

これがあなたの質問に答えるのに役立つことを願っています。

于 2013-03-26T17:10:18.243 に答える
-3
   $sqlqr = 'INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ("'.$name.'", "'.$text.'", CURRENT_TIMESTAMP)';

変数は引用符の外に置いてください。

于 2013-03-26T16:56:09.240 に答える