Php 为什么有些变量需要引号,而其他变量不需要引号

Php 为什么有些变量需要引号,而其他变量不需要引号,php,mysql,Php,Mysql,为什么有些变量需要引号,而有些不需要?例如,当我连接到DB变量时,不需要引号,但当我选择或插入DB时,我需要引号 例如: //variables $username="username"; $password="password"; $first=$_POST['first']; $last=$_POST['last']; //connect to DB mysql_connect(localhost,$username,$password); @m

为什么有些变量需要引号,而有些不需要?例如,当我连接到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);

我认为您混淆了PHP变量:

$username = "bobby tables";
与:


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

$ 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"

因此,调用
mysql\u connect()
中的
localhost
被解析为常量,并像
中的“localhost”
一样进行计算。

查询中的变量(字符串变量)需要引号,以使其作为变量可读。如果不添加引号,则将插入变量名称,而不是变量值本身。

连接到数据库时不必执行此操作的原因很简单,因为在数据库中不使用字符串变量。

这是一个字符串文本:
“username”
。它是一个值。
这是一个变量:
$username
。它可以保存任何值。将其视为占位符。
这是字符串文本中的变量:
“foo$username bar”
。它创造了一个新的价值

创建SQL查询时,只需将字符串传递给数据库,数据库将根据SQL语法规则对其进行解析。SQL语法要求在某些部分周围加引号。它与PHP变量无关

此外,这是一个常量:
localhost
。您没有定义该名称的常量,实际上这是一个错误,PHP可以通过动态创建字符串
'localhost'
来恢复。这实际上是一个错误

阅读PHP语法的以下各个部分:



只有在创建新字符串时才需要引号,例如:
“foo”
。变量从不需要引号。您可以在字符串文本中使用变量,因此其值将被插值:
“foo$bar baz”
。但是,
“$foo”
总是不必要的,因为它只是创建一个新字符串,其唯一内容是变量的内容。

将变量内容插入数据库的正确代码如下:

    //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);

你把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';
vis versa表示“如果您希望打印$name而不是Eric,请执行以下操作:

echo "this is \$name"; 

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

你能澄清你的问题吗?它不是很清楚。你的例子也不是很清楚。当我连接到数据库时,我开始在$username周围使用引号。当我插入$first之类的值时,我需要加引号。为什么一些变量需要引号,而其他变量不需要引号?这是我的看法这不是一种安全的数据库查询方法。一旦你掌握了SQL注入的基本知识,以及prepare/bind方法,你可以在PHP中使用mysqli或PDO来实现。我知道,我正在学习,但变量有点混乱。我认为所有变量都需要引号,这就是为什么我在连接时遇到问题。我使用了mysql_connect(localhost,'$username','$password');它不喜欢这个想法。或者这是你随着时间的推移学到的东西,什么得到引号,什么不得到引号?@Jordan如果你正在创建一个新字符串,你只需要引号,例如:
“foo
。变量不需要引号。您可以在字符串文本中使用变量,因此其值将被插值:
“foo$bar baz”
。但是
“$foo”
总是不必要的,因为它只是创建一个新字符串,其唯一内容是变量的内容。另请参见:PHP.
“one”。$two
vs.
“one$two”
vs.
“一{$two}”
。好吧,我来看看这个,这看起来可能也很棘手。谢谢你,这更合理一些吗?你是说你需要
“('$first')”
中的
”来“使变量可读”?如果你真的这么说,那完全是胡说八道。
“这是\$name'
→ 这是\$name
echo "this is \$name";