0

一部の変数に引用符が必要なのに、他の変数には必要ないのはなぜですか?DB変数に接続するときは引用符は必要ありませんが、DBを選択または挿入するときは、引用符が必要です。

例:

//variables
    $username="username";
    $password="password";
    $first=$_POST['first'];
    $last=$_POST['last'];

//connect to DB
   mysql_connect(localhost,$username,$password);
   @mysql_select_db($database) or die( "Unable to connect to database");

//values assigned
    $query = "INSERT INTO guestbook VALUES           
    ('','$first','$last','$email','$web','$comment')";
    mysql_query($query);
4

6 に答える 6

5

これは文字列リテラルです:"username"です。
これは変数です$username。任意のを保持できます。プレースホルダーと考えてください。
これは、文字列リテラル内の変数です"foo $username bar": 。新しいを作成します。

SQLクエリを作成するときは、データベースに文字列を渡すだけで、SQL構文規則に従って解析されます。SQL構文では、特定の部分を引用符で囲む必要があります。PHP変数とは何の関係もありません。

さらに、これは定数ですlocalhost。その名前の定数が定義されていません。実際には、PHPがその場で文字列を作成することによって回復するエラーです'localhost'。ただし、実際にはエラーです。

PHP構文のこれらの個々の部分について読んでください:http ://www.php.net/manual/en/langref.php 。


新しい文字列を作成する場合にのみ引用符が必要です。例:"foo"。変数に引用符は必要ありません。文字列リテラル内で変数を使用できるため、その値は補間されます"foo $bar baz"。ただし"$foo"、コンテンツが変数のコンテンツのみである新しい文字列を作成するだけなので、常に不要です。

于 2012-10-05T03:29:01.370 に答える
3

あなたはPHP変数を混乱させていると思います:

$username = "bobby tables";

文字列補間あり:

$interp = "foo $username bar";

前者は文字列"bobby tables"を変数$usernameに割り当て、後者は文字列"foo bobby tables bar"を変数に割り当てます$interp

于 2012-10-05T03:27:16.127 に答える
1

PHPは、文字の特定のシーケンスを未定義の定数として解釈し、それらを文字列として扱います。

$ php -r 'var_dump(OH_YEAH);'
PHP Notice:  Use of undefined constant OH_YEAH - assumed 'OH_YEAH' in Command line code on line 1
string(6) "OH_YEAH"

したがってlocalhost、への呼び出しmysql_connect()は定数として解析され、そのまま評価され"localhost"ます。

于 2012-10-05T03:27:26.823 に答える
1

クエリ内の変数(文字列変数)は、変数として読み取り可能にするために引用符が必要です。引用符を追加しない場合は、変数値自体の代わりに変数の名前を挿入します。
データベースに接続するときにこれを行う必要がない理由は、データベースで文字列変数を使用しないためです。

于 2012-10-05T03:28:13.330 に答える
1

変数のコンテンツをデータベースに挿入するための正しいコードは次のとおりです。

    //variables
$username="username";
$password="password";
$first=$_POST['first'];
$last=$_POST['last'];

    //connect to DB
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to connect to database");

    //values assigned
$query = "INSERT INTO guestbook VALUES           
('','.$first.','.$last.','.$email.','.$web.','.$comment.')";
mysql_query($query);
于 2012-10-05T03:29:10.323 に答える
1

PHPとMysqlを混同しています。PHPの場合、変数の引用符は必要ありません。

mysql_connect('localhost',$username,$password);

私があなたが混乱していることを正しく理解しているなら:

$query = "INSERT INTO guestbook VALUES ('','$first','$last','$email','$web','$comment')";

これらの変数を引用符で囲む必要があるのは、PHPではなくmySQL構文であるためです。mysqlでこれを行うと、エラーが発生します。

"INSERT INTO guestbook VALUES ('',$first,$last,$email,$web,$comment)";

その理由は、PHP変数がmySQLの値に変換され、mysqlがゲストブックを読み取るのと同じ方法でそれらの値を読み取るため、エラーが発生するためです。

また、私が始めたとき、phpの引用符の違いを理解するのに少し時間がかかりました:"次のようにphp変数を内部に含めることができます:

$name = "Eric"; 
echo "this is $name"; // prints  this is Eric

ただし、「」の代わりに「」を使用すると、「これは$ nameです」は文字列リテラルになります。「」を使用して実際に変数が必要な場合は、次のようにエスケープする必要があります。

echo 'this is \$name';

「Ericの代わりに$nameを出力したい場合は、次のようにします。

echo "this is \$name"; 

これが明確になり、PHPを学び続けることを願っています!

于 2012-10-05T03:41:04.333 に答える