2017-12-11 10 views
0

Ich habe wirklich Mühe zu versuchen, diese beiden Abfragen (unten) zusammen mit INNER JOIN zu bekommen. Ich übergebe ein Array in _GET. Ich möchte aus zwei verschiedenen mysql-Tabellen auswählen.PHP - Abfragen mehrerer Tabellen aus einem Array

URL Array _GET Beispiel: www.mysite.com/users_slideshows[]=one & users_slideshows [] = zwei & users_slideshows [] = drei

Hier sind meine zwei Abfragen, die ich versuche zu kombinieren: nur

$mysqli = new mysqli('localhost','root','1234','root'); 
$records = array(); 

foreach ($_GET["users_slideshows"] as $djahjkdsh) { 
    $result = $mysqli->query("SELECT * FROM playlist_builder WHERE playlist_builder.volume IN ('".$djahjkdsh."') "); 
    while($row = $result->fetch_array(MYSQL_ASSOC)) { 
      $records[] = array('tags' => array($row)); 
    } 
    $json = json_encode($records, JSON_PRETTY_PRINT); 

} 

foreach ($_GET["users_slideshows"] as $djahjkdsh) { 
    $result = $mysqli->query("SELECT * FROM custom_slideshow WHERE custom_slideshow.volume IN ('".$djahjkdsh."') "); 
    while($row = $result->fetch_array(MYSQL_ASSOC)) { 
      $records[] = array('tags' => array($row)); 
    } 
    $json = json_encode($records, JSON_PRETTY_PRINT); 

} 

Wenn ich aus einer Tabelle nur wählen, es funktioniert perfekt, aber es ist, wenn ich beide zusammen kombinieren.

Ich habe versucht, die unten folgenden ... nicht

SELECT * FROM playlist_builder INNER JOIN custom_slideshow ON custom_slideshow.volume = playlist_builder.volume IN ('".$djahjkdsh."') 

passiert Wenn jemand mir helfen könnte, was ich falsch mache, würde ich sehr zu schätzen. Vielen Dank!

+1

Sie eine [SQL-Injection-Sicherheit Verwundbarkeit] umgesetzt haben (https://en.wikipedia.org/wiki/SQL_injection). Sie nehmen Eingaben vom Benutzer und fügen sie in eine SQL-Abfrage ein, ohne sie zu validieren oder zu umgehen. Ein Benutzer könnte Eingaben erstellen, um seine Datenbankabfrage in jede von ihnen ausgewählte db-Operation umzuwandeln. Sie müssen lernen, vorbereitete Anweisungen zu verwenden, bevor Sie weitere Codierungen mit Web und Datenbanken vornehmen. –

+0

Ich verstehe das. Vielen Dank. Ich werde daran arbeiten, das zu verbessern! –

Antwort

1

Ihre SQL-Syntax ist falsch, da Sie zwei Ausdrücke in derselben logischen ON-Klausel ausführen. Trennen Sie einfach die ON-Klauseln in mehrere Ausdrücke. Verwenden Sie für einen Wert die Gleichheit über IN.

SELECT * FROM playlist_builder 
INNER JOIN custom_slideshow ON custom_slideshow.volume = playlist_builder.volume 
AND playlist_builder.volume = ?) 

Alternativ mit einer WHERE Klausel:

SELECT * FROM playlist_builder 
INNER JOIN custom_slideshow ON custom_slideshow.volume = playlist_builder.volume 
WHERE playlist_builder.volume = ?) 

PHP(mit parameterization und Tabellen-Aliases)

$sql = 'SELECT * FROM playlist_builder p 
     INNER JOIN custom_slideshow c ON c.volume = p.volume AND p.volume = ?'; 

foreach ($_GET["users_slideshows"] as $djahjkdsh) { 

    $stmt = $mysqli->prepare($sql); 
    $stmt->bind_param("s", $djahjkdsh); 
    $stmt->execute(); 

    $result = $stmt->get_result(); 
    while($row = $result->fetch_assoc()) { 
     $records[] = array('tags' => array($row)); 
    } 
    $json = json_encode($records, JSON_PRETTY_PRINT);  

    $stmt->close(); 
}