为什么有些变量需要引用而且不需要

时间:2012-10-05 03:21:23

标签: php mysql

为什么有些变量需要引用而其他变量不需要?我连接到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);

6 个答案:

答案 0 :(得分: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"总是不必要的,因为它只是创建一个新的字符串,其唯一内容是变量的内容。

答案 1 :(得分:3)

我认为你混淆了PHP变量:

$username = "bobby tables";

string interpolation

$interp = "foo $username bar";

前者将字符串"bobby tables"分配给变量$username,后者将字符串"foo bobby tables bar"分配给变量$interp

答案 2 :(得分: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"

因此,localhostmysql_connect()的调用中的"localhost"会被解析为常量,并且会像{{1}}那样进行评估。

答案 3 :(得分:1)

查询中的变量(字符串变量)需要引号才能使它们作为变量可读。如果不添加引号,则将插入变量的名称而不是变量值本身 连接到数据库时不必执行此操作的原因仅仅是因为您没有在那里使用字符串变量。

答案 4 :(得分: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);

答案 5 :(得分:1)

你混淆了PHP和Mysql。对于PHP,您不需要变量引号。

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

如果我理解正确,你会感到困惑:

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

你需要引用这些变量的原因是因为它是mySQL语法,而不是PHP。如果你在mysql中执行此操作,将会出现错误:

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

原因是因为PHP变量被转换为mySQL的值,而mysql将以读取guestbook的方式读取这些值,从而导致错误。

另外,当我开始时,我花了一些时间来掌握php引用的差异: “可以像这样拥有php变量:

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

但如果您使用'而不是',您将获得:这是$ name '是一个字符串文字。如果你使用'并且实际上想要变量,你需要像这样逃避它:

echo 'this is \$name';

反之亦然“如果你想要打印$ name而不是Eric,你可以:

echo "this is \$name"; 

希望这可以澄清,并继续学习PHP!