1

下面的替代 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";  
4

6 回答 6

1

这只是从静态和可变数据构建字符串的两种不同方法。

备选方案 A 使用串联,或使用串联运算符连接字符串和变量标记。

备选方案 B 使用变量扩展,其中双引号分隔的字符串内的变量在评估时扩展为它们的值。

两者都不一定更好或首选,但如果您必须使用单引号分隔的字符串,例如,那么您将需要使用替代 A。

当然,这些都不比使用绑定参数构建 SQL 查询更可取,因为不这样做会使您容易受到 SQL 注入攻击。

于 2009-02-05T18:27:21.497 回答
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()."'"
于 2009-02-05T18:27:37.470 回答
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”。

于 2009-02-05T22:21:08.950 回答
0

你也可以这样做:

$sql="SELECT * FROM exempel WHERE id = {$q}";

这对于触发以下内容很有用:

$sql="SELECT * FROM exempel WHERE id = {$row[id]}";
于 2009-02-05T22:26:14.167 回答
0

除了已经说过的内容之外,我发现最好的做法是,如果我正在编写查询,请按如下方式编写:

$sql = "SELECT * FROM table WHERE uid=" 。$uid 。“限制 1”;

像这样编写 SQL 的原因是 1. MySQL 查询不必解析 Query 中的 PHP 变量 2 您现在可以轻松读取和管理查询。

于 2009-02-05T18:40:34.917 回答
-1

在 'alt B' 中,$q 必须是 int 或 float 或其他数字

在 'alt A' 中,$q 可以是任何字符串、int 等。

单引号使这成为可能。如果您是第一次看,有时很难看到。

于 2009-02-05T18:25:15.150 回答