为什么有些变量需要引号而不需要引号
为什么有些变量需要引号而其他变量不需要引号?当我连接到数据库变量时不需要引号,但当我选择或插入数据库时,需要引号。为什么有些变量需要引号而不需要引号
例子:
//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);
这是一个字符串文字:"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"
总是不必要的,因为它只是创建一个新的字符串,其唯一的内容就是变量的内容。
我想你混淆PHP变量:
$username = "bobby tables";
$interp = "foo $username bar";
前者字符串"bobby tables"
分配给变量$username
,后者分配字符串"foo bobby tables bar"
到变量$interp
。
另请参阅:PHP [变量解析](http://us3.php.net/manual/en/language.types.string.php#language.types.string.parsing)。 '“一个”。 $ 2''与''一个$ 2“''''一个{$ 2}”''。 –
好吧,我会看看这个,这看起来也可能很棘手。谢谢 –
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"
会。
查询中的变量(一个字符串变量)需要引号使它们作为变量可读。如果不添加引号,则将插入变量的名称而不是变量值本身。
当您连接到数据库时,您不必这样做的原因很简单,因为您在那里不使用字符串变量。
谢谢,这样做更有意义 –
Wut?你的意思是你需要''('$ first')“'中的''来”使变量可读“吗?如果你真的认为*那*,那完全是无稽之谈。 – deceze
为变量的内容插入到数据库中正确的代码是这样的:
//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';
可见反之亦然为“如果你想让它打印出$名称来代替埃里克,你这样做:
echo "this is \$name";
希望这澄清,并不断学习PHP!
''这是\ $ name''→这是\ $的名称 – deceze
能不能请你清理你的问题就不是很清楚了。还有你的例子不是很清楚为好。 – sean
当我连接到我的数据库我盯着周围使用引号$ username。当我插入$ first等值时,我需要加引号你做了一些需要引号和其他的不需要的引号? –
这不是执行数据库查询的安全方法。一旦你掌握了关于SQL注入的基础知识,以及准备/绑定方法,你可以使用mysqli或PDO在PHP中完成。 – FoolishSeth