2015-07-10 98 views
-1

所以,我学习PHP和我有一个关于该部分的问题在我的截图强调:的MySQL更新查询

http://s18.postimg.org/8el9lkpuh/image.png

我阅读这些相关的问题,他们是通常乐于助人(我知道这里有没有处理安全问题),但并没有帮助我理解我的具体问题:

concatenate mysql select query with php variable?

MySQL query with PHP variables Issues

我的问题是,为什么我们需要围绕变量的这些点?这些连接点是?我不认为我们串联任何东西,我们只是评估一个变量,不是?为什么它需要引号?为什么不能简单地将“UPDATE table WHERE name = $ name”并让$ name评估为任何它..?事实上,当我试图做到这一点时,它只是不评估,但为什么?下面 了几行,echo "<p>Name: $row[1]</p>";,例如$行评估就好了......

编辑:

$q='UPDATE towels SET name="$name" WHERE id=1'; 输出:$名 我的变量是双引号里面,所以它应该得到评估,但没有按” T'

$q='UPDATE towels SET name="$name" WHERE id=1'; 输出:$ name 变量在双引号内,应该得到评估,但不是?

$q='UPDATE towels SET name="'.$name.'" WHERE id=1'; 输出:正确! 单引号内的变量,不应该得到评估,但呢?

$q="UPDATE towels SET name='$name' WHERE id=1"; 输出:正确! 单引号内的变量,不应该得到评估,但呢?

所以很清楚我错过了一些东西,因为它看起来都比它应该是对的。

+0

您与'.'连接,您可以执行UPDATE表WHERE name ='$ name''' –

+0

为什么我们需要连接? - 另外,当我做你写的东西时,输出总是简单的$ name(而不是“John”或任何名字应该是的) – user3399551

回答

3

.确实是一个连接运算符。

当你强调的语句进行处理,在''之间的位处理字面上,和那些''外进行评估。

因为要$name转换到它的价值(而不是仅仅让你的SQL内的文本$name),你必须把它放在''外,和.只是告诉编译器整个语句打包成一个长连接字符串。

看看这个... http://phphowto.blogspot.co.uk/2006/12/concatenate-strings.html ...了解更多关于串联的信息。

echo允许使用变量值的不同方式(它们在echo参数中进行评估......详情请参阅此处...http://php.net/Echo


在回答您的意见,您需要想象声明为三个不同的块UPDATE Towels SET Name="是字符串的第一部分,$name是第二部分," WHERE Id=1是第三部分。

他们都聚在一起说UPDATE Towels SET Name="John" WHERE Id=1

您需要周围的John"",因为这是格式预期在SQL语句 - 既然你想从字面上看那些"",它们所属的''内。

开始时会感到困惑,但您会得到它的窍门!

+0

谢谢你的细节 - 理解。但在我的情况下,我的$ name变量在单引号内,并且仍在评估中!这让我感到困惑!我会编辑我的帖子来更好地解释我的问题... – user3399551

+0

所以你说这是写它的最好方法吗? '$ q =“UPDATE towels SET name ='”。$ name。''WHERE id = 1“;'因为这不是我最初的状态..最初我有'$ q =”UPDATE towels SET name =“' 。$ name。'“WHERE id = 1”;'它运作稳定,即单引号在双引号内,这应该表示没有评估,但它发生了..? – user3399551

+1

你可以在php中交换使用''''和'''...你可以把'''放在''''里面,它会被字面解释,反之亦然。我不惊讶你发现它令人困惑,因为它是...只有经验才会减少你的困惑! –