下面的Alt A是来自php-mysql教程的声明。它应该工作。
我发现id-value相当混淆并且测试了alt B.这也很有效!
alt A的id值有什么意义?
MySQL 5.0.51,PHP 5.2.6
// Alt A :
$sql = "SELECT * FROM example WHERE id = '".$q."'";
// Alt B :
$sql = "SELECT * FROM example WHERE id = $q";
答案 0 :(得分:1)
这只是从静态和可变数据构建字符串的两种不同方法。
备选方案A使用连接,或使用连接运算符连接字符串和变量标记。
备选方案B使用变量扩展,其中双引号分隔字符串中的变量在评估时扩展为它们的值。
两者都不一定更好或者更受欢迎,但是如果你必须使用单引号分隔的字符串,那么你需要使用备选A。
当然,这些都不比使用绑定参数构建SQL查询更好,因为不这样做会让您容易受到SQL注入攻击。
答案 1 :(得分:1)
使用“Alt A”中的示例有两个原因。首先,如果字符串用单引号''括起来,变量的名称将用在字符串中而不是它的值中。
$id = 7;
'SELECT * FROM table WHERE id = $id' //works out to: WHERE id = $id
"SELECT * FROM table WHERE id = $id" //works out to: WHERE id = 7
其次,将字符串与函数调用的结果结合起来很有用。
"SELECT * FROM table WHERE id = '".getPrimaryId()."'"
答案 2 :(得分:0)
除了已经说过的内容之外,我发现最好的做法,如果我正在写一个查询,那么就这样写:
$ sql =“SELECT * FROM table WHERE uid =”。 $ uid。 “限制1”;
这样编写SQL的原因是:1。MySQL查询不必解析查询中的PHP变量,2现在您可以轻松读取和管理查询。
答案 3 :(得分:0)
当PHP与MySQL通信时,它实际上(实质上)是两种语言相互通信。这意味着字符串将在被发送到另一个语言之前由第一语言处理。这也意味着根据接收语言来思考
在这种情况下:
$q = 'some_name';<br/>
$query = "SELECT * FROM exempel WHERE id = $q";<br/>
你告诉MySQL到 “SELECT * FROM example1 WHERE id = some_name。
在这种情况下:
$q = 'some_name';<br/>
$query = "SELECT * FROM exempel WHERE id = '$q'";<br/>
和这种情况:
$q = 'some_name';<br/>
$query = "SELECT * FROM exempel WHERE id = '".$q."'";<br/>
你告诉MySQL到
“SELECT * FROM example1 WHERE id ='some_name'。
第一个示例应该导致错误,因为some_name不是MySQL查询的有效部分(在该上下文中)。另一方面,接下来的两个将正常工作,因为MySQL将查找字符串“some_name”。
答案 4 :(得分:0)
你也可以这样做:
$sql="SELECT * FROM exempel WHERE id = {$q}";
这对于引出诸如以下内容非常有用:
$sql="SELECT * FROM exempel WHERE id = {$row[id]}";
答案 5 :(得分:-1)
在'alt B'中,$ q必须是int或float或其他数字
在'alt A'中,$ q可以是字符串,整数等等。
单引号使这成为可能。如果您是第一次看到它,有时很难看到。