新手在这里。当$ 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;
}
答案 0 :(得分:3)
找不到字母数字组合,因为没有引用字符串:
$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);
答案 1 :(得分:1)
这是索引问题吗?
这不是一个非常糟糕的编码问题。
非数字值应该用引号括起来 - 当基础列类型为数字时,实际上文字值应始终用引号括起来 - 否则您可能会遇到性能问题。管理代码中的错误也遇到了问题 - 如果向数据库发送包含“WHERE style = 5000B”的查询,它将始终返回错误 - 您无法看到此错误意味着您已经您的网站缺少许多重要功能。实际上,由于内容表示总是在值离开PHP的位置进行验证/更改,这也意味着您的代码可能对SQL注入攻击持开放态度。
...然后这里有明显的数据库设计问题:'style'意味着一个非唯一的标识符,但是你从查询中返回一行而没有任何明确的排序,除了你选择的字段(即使它是独特的,它的效率非常低。)
答案 2 :(得分:0)
尝试使用单引号:
WHERE style='$color'