INNER JOIN mysql error and JSON view

0

Hello

I need to display the results of a SELECT with INNER JOIN in JSON format, my query is working, because I tested inside PHPMYADMIN, but my page does not work, I've tested everything, what can it be? Does anyone help me to find the error? It should be something very simple.

My SQL

    -- phpMyAdmin SQL Dump
    -- version 4.6.4
    -- https://www.phpmyadmin.net/
    --
    -- Host: 127.0.0.1
    -- Generation Time: May 30, 2017 at 01:45 PM
    -- Server version: 5.7.14
    -- PHP Version: 5.6.25

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;

    --
    -- Database: 'projeto001'
    --

    -- --------------------------------------------------------

    --
    -- Table structure for table 'compras'
    --

    CREATE TABLE 'compras' (
      'id' int(100) NOT NULL,
      'username' varchar(100) NOT NULL,
      'projeto' varchar(100) NOT NULL,
      'produto' varchar(100) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    --
    -- Dumping data for table 'compras'
    --

    INSERT INTO 'compras' ('id', 'username', 'projeto', 'produto') VALUES
    (1, 'Fulano', 'Projeto Novo', 'produto01');

    -- --------------------------------------------------------

    --
    -- Table structure for table 'empresa'
    --

    CREATE TABLE 'empresa' (
      'id' int(100) NOT NULL,
      'username' varchar(100) NOT NULL,
      'projeto' varchar(100) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    --
    -- Dumping data for table 'empresa'
    --

    INSERT INTO 'empresa' ('id', 'username', 'projeto') VALUES
    (1, 'Fulano', 'Projeto Novo');

    -- --------------------------------------------------------

    --
    -- Table structure for table 'estoque'
    --

    CREATE TABLE 'estoque' (
      'id' int(100) NOT NULL,
      'produto' varchar(100) NOT NULL,
      'quantidade' varchar(100) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    --
    -- Dumping data for table 'estoque'
    --

    INSERT INTO 'estoque' ('id', 'produto', 'quantidade') VALUES
    (1, 'produto01', '100');

    --
    -- Indexes for dumped tables
    --

    --
    -- Indexes for table 'compras'
    --
    ALTER TABLE 'compras'
      ADD PRIMARY KEY ('id');

    --
    -- Indexes for table 'empresa'
    --
    ALTER TABLE 'empresa'
      ADD PRIMARY KEY ('id');

    --
    -- Indexes for table 'estoque'
    --
    ALTER TABLE 'estoque'
      ADD PRIMARY KEY ('id');

    --
    -- AUTO_INCREMENT for dumped tables
    --

    --
    -- AUTO_INCREMENT for table 'compras'
    --
    ALTER TABLE 'compras'
      MODIFY 'id' int(100) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
    --
    -- AUTO_INCREMENT for table 'empresa'
    --
    ALTER TABLE 'empresa'
      MODIFY 'id' int(100) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
    --
    -- AUTO_INCREMENT for table 'estoque'
    --
    ALTER TABLE 'estoque'
      MODIFY 'id' int(100) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

My Code

    <?php

    $projeto = $_GET['projeto'];

    //PDO is a extension which defines a lightweight, consistent interface for accessing databases in PHP.
    $db=new PDO('mysql:dbname=mydatabase;host=localhost;','username','password');
    //here prepare the query for analyzing, prepared statements use less resources and thus run faster
    $nome = addslashes(filter_input(INPUT_GET, 'nome', FILTER_SANITIZE_SPECIAL_CHARS));

    //Produtos
    $row=$db->prepare("SELECT empresa.username, empresa.projeto, compras.username, compras.projeto, compras.produto, estoque.produto FROM 'empresa' AS empresa LEFT JOIN 'compras' AS compras ON compras.'username' = empresa.'username' AND compras.'projeto' = empresa.'projeto' LEFT JOIN 'estoque' AS estoque ON compras.'produto' = estoque.'produto' WHERE empresa.projeto = 'Projeto Novo' and compras.username = 'Fulano'");

    $row->execute();//execute the query
    $json_data=array();//create the array
    foreach($row as $rec)//foreach loop
    {
    $json_array['empresa.username']=$rec['empresa.username'];
    $json_array['empresa.projeto']=$rec['empresa.projeto'];
    $json_array['compras.username']=$rec['compras.username'];
    $json_array['compras.projeto']=$rec['compras.projeto'];
    $json_array['compras.produto']=$rec['compras.produto'];
    $json_array['estoque.produto']=$rec['estoque.produto'];
    //here pushing the values in to an array
    array_push($json_data,$json_array);

    }

    //built in PHP function to encode the data in to JSON format
    echo json_encode($json_data);
    ?>

Valew

    
asked by anonymous 29.05.2017 / 21:55

2 answers

0

Try this code, I made a change, I added the variable $ rows and fetchall.

<?php

//Produtos
$row=$db->prepare("SELECT empresa.username, empresa.projeto, compras.username, compras.projeto, compras.produto, estoque.produto FROM 'empresa' AS empresa LEFT JOIN 'compras' AS compras ON compras.'username' = empresa.'username' AND compras.'projeto' = empresa.'projeto' LEFT JOIN 'estoque' AS estoque ON compras.'produto' = estoque.'produto' WHERE empresa.projeto = 'Projeto Novo' and compras.username = 'Fulano'");

$row->execute();
$json_data=array();
$results = $row->fetchAll();

foreach($results as $rec)
{
    $json_array['username']=$rec['username'];
    $json_array['projeto']=$rec['projeto'];
    $json_array['produto']=$rec['produto'];

    //here pushing the values in to an array
    array_push($json_data,$json_array);
}

//built in PHP function to encode the data in to JSON format
header('Content-Type: application/json');
echo json_encode($json_data);
    
29.05.2017 / 22:55
0

Hello, put before json_encode the following code:

header('Content-Type: application/json');

This is for the response to be in json format, without this, your response is considered a webpage.

Note: You can not have any content output before heading the header, if you have already checked out some content, you will receive a warning / error message from php.

    
29.05.2017 / 21:59