在php中使用mysql查询

时间:2016-04-22 14:01:41

标签: php mysql

我有一个我想在php中使用的SQL查询

 SET @sql = NULL;
            SELECT
              GROUP_CONCAT(DISTINCT
                CONCAT(
                  'max(CASE WHEN ca.date = ''',
                  date_format(date, '%Y-%m-%d'),
                  ''' THEN coalesce(p.status, ''P'') END) AS `',
                  date_format(date, '%Y-%m-%d'), '`'
                )
              ) INTO @sql
            FROM calendar
            where date>='2013-06-01'
              and date <= '2013-06-05';

        SET @sql 
          = CONCAT('SELECT ca.studentname,
                      ca.rollno,
                      ca.class, ', @sql, ' 
                    from
                    (
                      select c.date, a.studentname, a.rollno, a.class
                      from calendar c
                      cross join tbl_admission a
                    ) ca
                    left join tbl_absentees p
                      on ca.rollno = p.rollno
                      and ca.date = p.date
                    where ca.date>=''2013-06-01''
                      and ca.date <= ''2013-06-05''
                    group by ca.studentname, ca.rollno, ca.class
                    order by ca.rollno');

        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

2 个答案:

答案 0 :(得分:0)

MySQL PREPARE和EXECUTE语句仅在MySQL存储程序中受支持。例如,CREATE PROCEDURE语句。

要从PHP运行MySQL查询,您需要选择要使用的数据库(mysqli或PDO),并且您的PHP代码需要建立与MySQL服务器的连接。准备SQL语句,执行它和获取结果(对于SELECT)的模式对于两个库都是类似的,但语法有点不同。 (语法还取决于您是在编写面向对象的样式还是面向过程的样式。)

您发布的MySQL代码非常奇怪。

  • 为用户定义的变量@sql
  • 分配NULL
  • 执行SELECT语句以填充udv @sql
  • 将CONCAT函数的结果分配给相同的udv @sql
  • 调用PREPARE和EXECUTE来动态执行语句
  • 在获取任何结果之前关闭准备好的语句

我不确定我明白你在问什么。

在PHP中

  • 连接数据库
  • 准备第一个SELECT语句
  • 执行声明
  • 获取一行,将返回的值存储到PHP变量
  • 关闭声明

  • 使用PHP字符串连接操作将另一个SQL语句串联到一个PHP变量中

  • 根据PHP变量

  • 的内容准备SQL语句
  • 执行SQL语句
  • 获取一些行(?这个步骤在MySQL示例中没有看到)
  • 关闭声明

答案 1 :(得分:0)

最好使用该sql代码在MySQL数据库中创建存储过程,然后通过php调用该过程。