mysql 查询中的双引号和单引号有什么区别


What is the difference between double quotes and single quotes in mysql query

我发现了这个问题,现在我的插入查询可以正常工作,但我不明白为什么。这是我目前的工作查询:

$add_movie = mysql_query("INSERT INTO ownedmovies VALUES ('', '{$movie_data['Title']}',
    '{$movie_data['Year']}', '{$movie_data['Rated']}', '{$movie_data['Runtime']}',
    '{$movie_data['Genre']}', '{$movie_data['Director']}', '{$movie_data['Writer']}',
    '{$movie_data['Actors']}', '"{$movie_data['Plot']}'", '{$movie_data['imdbRating']}')");

请注意,我在绘图字段周围使用了双引号,在其他所有内容周围使用了正常引号。当我以与其他人相同的方式执行绘图字段时,它不会出错,但不会将任何内容插入到表中......现在它工作得很好。

谁能启发我为什么会这样?

谢谢

我怀疑您的绘图字符串包含单引号。为了避免这个问题,你应该使用mysql_real_escape_string转义字符串值,或者(最好)使用参数化查询。

在这种情况下,将单引号更改为双引号的"解决方案"似乎有效,但如果绘图字符串包含双引号,它将失败。

在 PHP 中,双引号将解析旁边的变量,其中的单引号将只是字符串中的单引号。

要将 varchar 参数传递给 mysql,

它们需要括在引号中,因此单引号作为 varchar 参数传递给 mysql。

您的 php 变量正在双引号内解析,sql 字符串将包含您在变量中传递的值。

在MySQL查询中使用双引号时要小心 - 根据MySQL运行的SQL模式,它们具有不同的含义。

select "fred" from table

在ANSI_QUOTE模式下将返回 fred 列中的值,否则它将返回文本值 fred

双引号和单引号一起使用,以防止程序混淆查询的结束位置。

例如查询

 ("Select 'name' From 'contacts'")

如果您使用了所有双引号,那么它看起来像这样

 ("Select "name" From "contacts"")

并且可以让程序认为实际查询是"选择"

我就是这么想的。