Php 为什么有些变量需要引号,而其他变量不需要引号
为什么有些变量需要引号,而有些不需要?例如,当我连接到DB变量时,不需要引号,但当我选择或插入DB时,我需要引号 例如: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
//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";