Php 为什么我的查询查找的字段条目是数字,而不是数字/字母组合

Php 为什么我的查询查找的字段条目是数字,而不是数字/字母组合,php,mysql,Php,Mysql,我是新手。当$color引用“样式”字段中的数字条目(例如“5000”)时,以下函数可以正常工作。但是如果条目是“5000B”或完全是字母,它就找不到它。这是索引问题吗 function get_shirt_colors_by_style($color) { db_connect(); $query = "SELECT style,sanmar_mainframe_color,unique_key,color_square_image FR

我是新手。当$color引用“样式”字段中的数字条目(例如“5000”)时,以下函数可以正常工作。但是如果条目是“5000B”或完全是字母,它就找不到它。这是索引问题吗

    function get_shirt_colors_by_style($color)
    {
db_connect();

    $query = "SELECT style,sanmar_mainframe_color,unique_key,color_square_image 
              FROM sanmar_products WHERE style=$color 
              GROUP BY style ORDER BY style";

    $result = mysql_query($query);
    $data = mysql_fetch_array($result);

    return $data;
    }

找不到字母数字组合,因为字符串未被引用:

$query = "SELECT style,sanmar_mainframe_color,unique_key,color_square_image FROM sanmar_products WHERE style='$color' GROUP BY style ORDER BY style";
//-----------------------------------------------------------------------------------------------------------^^^^^^^^^
MySQL查询中不需要引用数值,但字符串值必须始终用单引号括起来,如
'5000B'

我们假设
$color
的值已经针对SQL注入进行了转义:

// Hopefully this happened already.
// If not, do it before running mysql_query()
$color = mysql_real_escape_string($color);

找不到字母数字组合,因为字符串未被引用:

$query = "SELECT style,sanmar_mainframe_color,unique_key,color_square_image FROM sanmar_products WHERE style='$color' GROUP BY style ORDER BY style";
//-----------------------------------------------------------------------------------------------------------^^^^^^^^^
MySQL查询中不需要引用数值,但字符串值必须始终用单引号括起来,如
'5000B'

我们假设
$color
的值已经针对SQL注入进行了转义:

// Hopefully this happened already.
// If not, do it before running mysql_query()
$color = mysql_real_escape_string($color);

请尝试在此处使用单引号:

WHERE style='$color'

请尝试在此处使用单引号:

WHERE style='$color'
这是索引问题吗

    function get_shirt_colors_by_style($color)
    {
db_connect();

    $query = "SELECT style,sanmar_mainframe_color,unique_key,color_square_image 
              FROM sanmar_products WHERE style=$color 
              GROUP BY style ORDER BY style";

    $result = mysql_query($query);
    $data = mysql_fetch_array($result);

    return $data;
    }
不,这是一个非常糟糕的编码问题

非数值应括在引号中-实际上,当基础列类型为数值时,文字值应始终括在引号中-否则可能会遇到性能问题。您在管理代码中的错误时也遇到了问题—如果将包含“WHERE style=5000B”的查询发送到数据库,它将始终返回错误—您无法看到此错误意味着您的站点缺少许多重要功能。事实上,由于内容表示总是在值离开PHP时进行验证/更改,这也意味着您的代码可能会受到SQL注入攻击

…然后这里就出现了明显的数据库设计问题:“style”意味着一个非唯一标识符,但是您从查询中返回一行时,除了在您选择的字段上之外,没有任何明确的顺序(即,即使它是唯一的,也非常高效)

这是索引问题吗

    function get_shirt_colors_by_style($color)
    {
db_connect();

    $query = "SELECT style,sanmar_mainframe_color,unique_key,color_square_image 
              FROM sanmar_products WHERE style=$color 
              GROUP BY style ORDER BY style";

    $result = mysql_query($query);
    $data = mysql_fetch_array($result);

    return $data;
    }
不,这是一个非常糟糕的编码问题

非数值应括在引号中-实际上,当基础列类型为数值时,文字值应始终括在引号中-否则可能会遇到性能问题。您在管理代码中的错误时也遇到了问题—如果将包含“WHERE style=5000B”的查询发送到数据库,它将始终返回错误—您无法看到此错误意味着您的站点缺少许多重要功能。事实上,由于内容表示总是在值离开PHP时进行验证/更改,这也意味着您的代码可能会受到SQL注入攻击


…这里还有明显的数据库设计问题:“样式”意味着非唯一标识符,但您从查询中返回一行时,除了您选择的字段外,没有任何明确的顺序(即,即使它是唯一的,但效率很低)。

谢谢。现在我要去射自己的脑袋了。@dull\u不要。你有太多的生活目标。当然值得关注的是MySQL的新版本,因为它们不再悄悄地将字符串变为数字-例如,MySQL 4过去让你不用用
'37'
更新
INT(10)
。。。所以MySQL5现在是“数值不能被引用”,而不是“不需要引用”。谢谢。现在我要去射自己的脑袋了。@dull\u不要。你有太多的生活目标。当然值得关注的是MySQL的新版本,因为它们不再悄悄地将字符串变为数字-例如,MySQL 4过去让你不用用
'37'
更新
INT(10)
。。。所以MySQL5现在是“数值不能被引用”,而不是“不需要引用”。