0

为什么有些变量需要引号而其他变量不需要?例如,当我连接到数据库变量时不需要引号,但是当我选择或插入数据库时​​,我需要引号。

例子:

//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 和 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 会像读取留言簿一样读取这些值,从而导致错误。

另外,当我开始时,我花了一段时间才掌握了 php 引号的区别:" 可以像这样在里面包含 php 变量:

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

但是如果你使用 ' 而不是 " 你会得到:这是 $name ' 是一个字符串文字。如果你使用 ' 并且实际上想要变量,你需要像这样转义它:

echo 'this is \$name';

反之亦然,如果你想让它打印出 $name 而不是 Eric,你可以这样做:

echo "this is \$name"; 

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

于 2012-10-05T03:41:04.333 回答
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 回答