0

I got error prepare SQL in PHP with PDO. I was Tried query in PHPMyadmin than it's work, but when i tried in php it doesn't work with error

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use

In my case i want to pivot my data

this my query:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
               CONCAT('MAX(IF(`meta_key` = "', `meta_key`,'", `meta_value`,"")) AS "',`meta_key`,'"')
              ) INTO @sql
FROM wp_frmt_form_entry_meta 
RIGHT JOIN wp_frmt_form_id
    ON wp_frmt_form_entry_meta.meta_key = wp_frmt_form_id.meta_keyy
    ORDER BY wp_frmt_form_entry_meta.meta_id;


SET @sql = CONCAT('SELECT  `entry_id`,  ', @sql, ' 
                  FROM wp_frmt_form_entry_meta s
                 GROUP BY s.`entry_id`
                 ORDER BY s.`entry_id`');
#SELECT @sql;
PREPARE a FROM @sql;
EXECUTE a;

and this my php:

global $con;
    $hasil = array();
    $sql1 = "SET @sql = NULL;";
            ."SELECT GROUP_CONCAT(DISTINCT CONCAT(\'MAX(IF(`meta_key` = \"\', `meta_key`,\'\", `meta_value`,\"\")) AS \"\',`meta_key`,\'\"\')) INTO @sql 
                FROM wp_frmt_form_entry_meta 
                RIGHT JOIN wp_frmt_form_id
                ON wp_frmt_form_entry_meta.meta_key = wp_frmt_form_id.meta_keyy
                ORDER BY wp_frmt_form_entry_meta.meta_id;
                
                SET @sql = CONCAT(\'SELECT `entry_id`,  \', @sql, \' 
                FROM wp_frmt_form_entry_meta s
                GROUP BY s.entry_id
                ORDER BY s.entry_id\');
                
                #SELECT @sql;
                PREPARE a FROM @sql;
                EXECUTE a;";
    try {
        $stmt = $con ->prepare($sql1);
        $stmt->execute();
        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        $rs = $stmt->fetchAll();

        if($rs != null){
            $i=0;
            foreach ($rs as $val) {
                $hasil[$i]['name-1'] = $val['name-1'];
                ...........

                $i++;
            }
        }

    } catch (Exception $e) {
        echo 'Error getAllData = '.$e->getMessage();
    }
    return $hasil;

Please someone can help this out?

Dharman
  • 30,962
  • 25
  • 85
  • 135
  • Is the field name `wp_frmt_form_id.meta_keyy` valid ? – winston86 Sep 30 '21 at 04:44
  • The SQL code works on fake data - https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=c6f1303288b4d4a22d2132425599968a Now look at your PHP code: `.. $sql1 = "SET @sql = NULL;"; ."SELECT ...` – Akina Sep 30 '21 at 05:11
  • The problem is because you have concatenated two queries together. Just execute separate prepared statements and it will work – Dharman Sep 30 '21 at 07:47

0 Answers0