以下代码出了什么问题?

时间:2013-09-03 11:07:38

标签: php mysql sql

我的PHP代码如下:

$data = $grid->GetData();

foreach($data as $key => $value) { 
          $sql  =" SELECT users_details.user_state,users_details.user_city FROM ".TBL_USERS." AS user, "
          $sql .= TBL_USERS_DETAILS." AS users_details WHERE user.user_id = ". $data['user_id']; 

echo $sql; die;
          $this->mDb->Query( $sql);
          $data = $this->mDb->FetchArray();

        }

数组$ data如下:

Array
(
    [0] => Array
        (
            [user_id] => 9def02e6337b888d6dbe5617a172c18d
            [user_first_name] => Ashutosh
            [user_last_name] => Modi
            [user_email] => ashutosh.modi@gmail.com
            [user_status] => enable
            [user_subscription] => lifetime
            [user_registered_type] => online
            [user_reg_date] => 1325581397
        )

    [1] => Array
        (
            [user_id] => a6d22e4cc3f65778a60b359842bcec82
            [user_first_name] => Dilip
            [user_last_name] => Modi
            [user_email] => dm.modi@gmail.com
            [user_status] => enable
            [user_subscription] => period
            [user_registered_type] => online
            [user_reg_date] => 1325152066
        )

)

现在在查询部分我想使用上面数组中的user_id值,但是我无法做到。我在某个地方出错了吗?你能帮我纠正吗?当我打印查询时,出现空白屏幕而不是正确的查询。提前谢谢。

4 个答案:

答案 0 :(得分:4)

您在sql命令中使用了错误的数据变量:

而不是

$data['user_id']

应该是

$value['user_id']

因为你是iteratin $ data而且每个中间结果都是$ key / $ value对

修改 第二个错误是这一行:

$sql =" SELECT users_details.user_state,users_details.user_city FROM ".TBL_USERS." AS user, "

此行最后缺少分号

原因,为什么你有空白页,可能是因为PHP错误。如果您已启用error_reporting,您会看到,PHP错误输出有什么问题。

答案 1 :(得分:0)

最后一个问题是你的查询确实想要join条件。只需不要使用,子句中的from始终使用带有on子句的显式连接条件。查询应如下所示:

SELECT users_details.user_state, users_details.user_city
FROM ".TBL_USERS." AS user join ".= TBL_USERS_DETAILS." AS users_details
     on user.user_id = users_details.user_id
WHERE user.user_id = ". $data['user_id'];

我猜测连接条件位于字段user_id上。

答案 2 :(得分:0)

也许你想要这个......

 $sql =" 
 SELECT ud.user_state
      , ud.user_city 
   FROM TBL_USERS user u
   JOIN TBL_USERS_DETAILS ud
     ON ud.user_id = u.user_id 
  WHERE u.user_id = {$value['user_id']};
"; 

答案 3 :(得分:0)

您正在使用

$sql .= TBL_USERS_DETAILS." AS users_details WHERE user.user_id = ". $data['user_id']; 

$data是数组的集合而非单个数组,因此如果要使用所有user_id,请使用循环指定它或使用连接表(例如。$data[0]['user_id']代替$data['user_id']或逗号在查询中分隔所有用户ID)