下面的替代 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";
这只是从静态和可变数据构建字符串的两种不同方法。
备选方案 A 使用串联,或使用串联运算符连接字符串和变量标记。
备选方案 B 使用变量扩展,其中双引号分隔的字符串内的变量在评估时扩展为它们的值。
两者都不一定更好或首选,但如果您必须使用单引号分隔的字符串,例如,那么您将需要使用替代 A。
当然,这些都不比使用绑定参数构建 SQL 查询更可取,因为不这样做会使您容易受到 SQL 注入攻击。
使用“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()."'"
当 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”。
你也可以这样做:
$sql="SELECT * FROM exempel WHERE id = {$q}";
这对于触发以下内容很有用:
$sql="SELECT * FROM exempel WHERE id = {$row[id]}";
除了已经说过的内容之外,我发现最好的做法是,如果我正在编写查询,请按如下方式编写:
$sql = "SELECT * FROM table WHERE uid=" 。$uid 。“限制 1”;
像这样编写 SQL 的原因是 1. MySQL 查询不必解析 Query 中的 PHP 变量 2 您现在可以轻松读取和管理查询。
在 'alt B' 中,$q 必须是 int 或 float 或其他数字
在 'alt A' 中,$q 可以是任何字符串、int 等。
单引号使这成为可能。如果您是第一次看,有时很难看到。