【问题标题】:MySQL query to select specific dataMySQL查询以选择特定数据
【发布时间】:2013-08-31 11:27:48
【问题描述】:

我想在我的任何用户登录网站时显示属于他们的数据,以及每个表的名称(他们完成了对它们的报价)。

这是我使用的代码,但是当我添加它时它不起作用。

$result = mysql_query('SELECT *,\'tbl1\' AS tablename FROM (SELECT * FROM  table1 WHERE user_id='$user_id') as tbl1 UNION SELECT *,\'tbl2\' AS tablename FROM (SELECT * FROM table1 WHERE user_id='$user_id') as tbl2'. ' ORDER BY `date` DESC');

while($sdata = mysql_fetch_array($result)){
  echo $sdata['date'];
  echo $sdata['tablename'];
  echo $sdata['user_reward'];
}

我在哪里做错了?

【问题讨论】:

  • 欢迎来到 Stack Overflow!请在编写任何更多 SQL 接口代码之前,必须阅读 proper SQL escaping 以避免严重的 SQL injection bugs。此外,mysql_* functions 不应在新应用程序中使用,并且将从 PHP 的未来版本中删除。请考虑切换到MySQLi or PDO。正如所写,有人可能会在几秒钟内毁掉你的整个网站。
  • 第一个错误在标题中。使用“想要”一词使情况更加复杂。从那里开始走下坡路。
  • 让我们从头开始。你得到什么错误?如果没有错误,会发生什么? mysql_error() 中是否有任何 mysql 错误?您确定此查询选择了您实际要选择的数据吗?
  • 我同意@Strawberry - wanna 和 pls 往往会在这里赢得反对票。请记住,这里的问题是留给后人的,这里不是聊天室或论坛。
  • 我建议你从调用中分离出你的 SQL 字符串,这样你就可以打印出你发送到数据库的内容。此外,将您的 SQL 包装到大约 80 个字符的边距,这样每个人都更容易阅读(在您的编辑器和我们的屏幕上)。请参阅my recent answer here 了解更多详情。

标签: php


【解决方案1】:

您在$user_id 附近缺少连接运算符:

$result = mysql_query(
    'SELECT *,\'tbl1\' AS tablename FROM (
        SELECT * FROM  table1 WHERE user_id=' . $user_id . '
     ) as tbl1
     UNION
     SELECT *,\'tbl2\' AS tablename FROM (
        SELECT * FROM table1 WHERE user_id=' . $user_id . '
     ) as tbl2' . ' ORDER BY `date` DESC'
);

为了更清楚起见,我已经结束了调用 - 我建议您在自己的代码中执行相同的操作。我倾向于在这里使用" 标记,所以你不需要转义撇号。

ORDER BY 子句似乎也被冗余连接了 - 删除点并将查询的这一部分添加到 as tbl2 部分。

我会这样做:

$sql = "
    SELECT *, 'tbl1' AS tablename FROM (
        SELECT * FROM  table1 WHERE user_id={$user_id}
     ) as tbl1
     UNION
     SELECT *, 'tbl2' AS tablename FROM (
        SELECT * FROM table1 WHERE user_id={$user_id}
     ) as tbl2
     ORDER BY `date` DESC
";
$result = mysql_query($sql);

确保$user_id 被正确转义或强制转换,以避免出现安全问题。此外,不再推荐使用此数据库库,并将在 PHP 的未来版本中删除。最好改用 PDO 或 mysqli,并使用参数化。

最后,查询本身看起来相当繁琐——看起来可以简化。也许就此提出一个单独的问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2011-11-07
    • 2017-12-15
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2012-07-25
    相关资源
    最近更新 更多