0

よく検索しましたが、私の問題に関連する質問が見つからなかったため、これを投稿しました。

この次の3行が同じ仕事をすることを知りました。

$q="insert into employee values('".$e."','".$nm."','".$desg."','".$sal."')";

$q="insert into employee values('$e','$nm','$desg','$sal')";

$q="insert into employee values('{$e}','{$nm}','{$desg}','{$sal}')";

$e, $name, &desg, &sal are variables.

どちらが最適なのか、なぜこれら 3 つが同じように機能するのか、私は混乱しています。最初のものは、変数を値に置き換えてクエリを作成することは完全に明らかです。

しかし、2番目と3番目では、変数がどのように置き換えられているかがわかりません。それは私が学んでいるところから、変数をエコーに挿入する場合、{}で囲むか連結する必要があると言っています。

元:echo "This is {$name}" / echo "This is ".$name;

だから私は混乱しています。

4

4 に答える 4

0

人々がコメントで指摘し始めたように、これらの方法はどれもお勧めできませんし、安全でもありません。

ここで説明されているように、問題は SQL インジェクションです。

PDO を使用したい。このチュートリアルまたはこのリファレンスを参照してください。

接続するには:

$dsn="mysql:host=127.0.0.1;dbname=myDatabase";
$username="myUsername";
$password="myPassword";
try {
    $DBH=new PDO($dsn,$username,$password);
} catch(PDOException $e) {
    echo $e->getMessage();
}

サンプル挿入:

    $STH = $DBH->prepare("INSERT INTO job (snum, date, length, type, ref) VALUES (:u,:d,:l,:t,:r)");
    $STH->bindParam(':u', $myVariable1);
    $STH->bindParam(':d', $myVariable2); 
    $STH->bindParam(':l', $myVariable3);
    $STH->bindParam(':t', $myVariable4);
    $STH->bindParam(':r', $myVariable5);
    try { 
        $STH->execute();
    } catch(PDOException $e) {
        echo $e->getMessage();
    }
于 2013-08-17T09:19:33.697 に答える