wie mehre sql befehle nacheinander ausführen?

5 Antworten

Komplett unterschiedliche SQL Abfragen werden auch unabhängig von einander ausgeführt. Möchte man mehrere Tabellen oder Unterabfragen nebeneinander verbinden nutzt man JOINs, möchte man mehrere Tabellen oder Unterabfragen des selben Aufbaus untereinander verbinden nutzt man UNION.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012
wie mehre sql befehle nacheinander ausführen?

Was Du geschrieben hast sind nicht mehrere Befehle sondern ist ein einziger Befehl:

SELECT something, dateiendung FROM pics ORDER BY something DESC LIMIT 0,25

Alex


Mensch4 
Fragesteller
 19.05.2021, 17:18

ich hab jetzt folgendes, aber es wird nix angezeigt:

$sql = "SELECT pictureid, filetype FROM pictures ORDER BY pictureid DESC LIMIT 0,5";
$result = $link -> query($sql);
$output_array = $result -> fetch_assoc();
echo nl2br("$output_array[0]");
echo nl2br("$output_array[1]");
echo nl2br("$output_array[2]");
echo nl2br("$output_array[3]");
echo nl2br("$output_array[4]");
echo nl2br("$output_array[5]");
echo nl2br("$output_array[6]");
0
Mensch4 
Fragesteller
 19.05.2021, 17:26
@EinAlexander

das sollte eigentlich einwandfrei funktionieren, hab ich in anderen sachen auch verwendet, das macht das mit der datenbankverbindung

0
EinAlexander  19.05.2021, 17:31
@Mensch4

Das benatwortet meine Frage nicht. Aber egal. Gib mal anstatt Deiner ganzen echos ein

var_dump($output_array);

aus. Denn

echo nl2br("$output_array[0]");

kann nicht funktionieren.

0
Mensch4 
Fragesteller
 19.05.2021, 17:33
@EinAlexander

hat """array(2) { ["pictureid"]=> string(8) "example6" ["filetype"]=> string(4) ".jpg" }""""" ausgegeben

0
EinAlexander  19.05.2021, 17:40
@Mensch4
array(2) {
["pictureid"]=> string(8) "example6"
["filetype"]=> string(4) ".jpg"
}

das bedeutet, dass jede Zeile des Arrays output_array aus zwei Spalten besteht. Der Spalte 'pictureid' und der Spalte 'filetype'. Das kannst du nicht mit echo $output_array[0] ausgeben sondern z. B. mit

echo $outputarray[0]['pictureid'].$outputarray[0]['filetype'];

oder wenn Du alles ausgeben willst mit

foreach($outputarray as $value)
{
  echo $value['pictureid'].$value['filetype'].'<br>';
}
0
Mensch4 
Fragesteller
 19.05.2021, 17:44
@EinAlexander

das ist seltsam, in der datenbank stehen 6 einträge der art, ausgegeben wird anscheinend nur ein einziger davon

0
EinAlexander  19.05.2021, 17:48
@Mensch4
das ist seltsam, in der datenbank stehen 6 einträge der art, ausgegeben wird anscheinend nur ein einziger davon

Ja. Ausgegeben wird nur der erste. Enweder Du nimmst fetchAll oder Du schreibst

while ($output_array = $result->fetch_assoc())
{
   echo $outputarray['pictureid'];
}

   

0
Mensch4 
Fragesteller
 19.05.2021, 18:12
@EinAlexander

nein nein, auch mit var_dunmp kommt nur ein datenpaar raus, anscheinend holt es nicht alle

0
Mensch4 
Fragesteller
 19.05.2021, 18:16
@EinAlexander

nein nein, auch mit var_dunmp kommt nur ein datenpaar raus, anscheinend holt es nicht alle, normalerweise sollte das array 5 datenpaare haben, aber mit var_dump kommt nur eins raus, mit

while ($output_array = $result->fetch_assoc())

{

echo $outputarray['pictureid'];

}

kommt gar nichts raus, und mit

echo $output_array[0]['pictureid'].$output_array[0]['filetype'];
echo $output_array[1]['pictureid'].$output_array[1]['filetype'];

wird ebenfalls nichts auf dem bildschirm angezeigt

0
SELECT something, dateiendung FROM pics ORDER BY something DESC LIMIT 0,25;
SELECT * FROM pics;

Immer Semikolon (;) und den nächsten Befehl. Vergess niemals das Semikolon. Kriegst du in der Schule für Punkte abgezogen ;)

Woher ich das weiß:Studium / Ausbildung

Mensch4 
Fragesteller
 19.05.2021, 17:17

ich hab jetzt folgendes aber es wird nix auf der seite angezeigt

$sql = "SELECT pictureid, filetype FROM pictures ORDER BY pictureid DESC LIMIT 0,5";
$result = $link -> query($sql);
$output_array = $result -> fetch_assoc();
echo nl2br("$output_array[0]");
echo nl2br("$output_array[1]");
echo nl2br("$output_array[2]");
echo nl2br("$output_array[3]");
echo nl2br("$output_array[4]");
echo nl2br("$output_array[5]");
echo nl2br("$output_array[6]");
0

wie schon mal erwähnt - glaub du solltest dir wirklich mal paar sql basics anschauen....

des was du schreibst is ne ganz normale sql-abfrage


Mensch4 
Fragesteller
 19.05.2021, 17:19

ich hab jz folgendes aber es wird nix angezeigt, obwohl ich den anleitungen von https://w3schools.com gefolgt bin

$sql = "SELECT pictureid, filetype FROM pictures ORDER BY pictureid DESC LIMIT 0,5";
$result = $link -> query($sql);
$output_array = $result -> fetch_assoc();
echo nl2br("$output_array[0]");
echo nl2br("$output_array[1]");
echo nl2br("$output_array[2]");
echo nl2br("$output_array[3]");
echo nl2br("$output_array[4]");
echo nl2br("$output_array[5]");
echo nl2br("$output_array[6]");
0
DodgeRT  19.05.2021, 17:22
@Mensch4

warum so eine umständliche ausgabe... gugg dir mal foreach an.

und dann schau was dir der sql überhaupt zurück gibt (ggf die sql auch mal in phpmysql absetzen)

0
Mensch4 
Fragesteller
 19.05.2021, 17:24
@DodgeRT

wenn ich das mit echo ausgebe gibt es das wort "Array" aus

0
Mensch4 
Fragesteller
 19.05.2021, 17:30
@DodgeRT

hab $output_array und $result ausgegeben, kommt

Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string in

0
DodgeRT  19.05.2021, 17:36
@Mensch4

ok, seh oben du hast ne ausgabe... dann liegts an dem echos... die auch käse sind mit ""

0
Mensch4 
Fragesteller
 19.05.2021, 17:37
@DodgeRT

<?php

// Initialize the session

session_start();

 

// Check if the user is logged in, if not then redirect him to login page

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){

    header("location: login.php");

    exit;

}

$us = $_SESSION["username"];

// Include config file

require_once "config.php";

$last_login = date("Y-md-d H:i:s");

echo nl2br ("$last_login \n");

// Check input errors before inserting in database

if (!empty($last_login)) {

        

    // Prepare an insert statement

    $sql = "UPDATE users SET last_login=? WHERE username=?";

     

    if ($stmt = mysqli_prepare($link, $sql)) {

        // Set parameters

        $param_last_login = $last_login;

        

        // Bind variables to the prepared statement as parameters

        mysqli_stmt_bind_param($stmt, 'ss', $param_last_login, $us);

        

        // Attempt to execute the prepared statement

        if (mysqli_stmt_execute($stmt)) {

            // 

            echo ("the last login date has been set \n");

        } else{

            echo "Oops! Something went wrong. Please try again later.";

        }

        // Close statement

        mysqli_stmt_close($stmt);

    }

}

$sql = "SELECT pictureid, filetype FROM pictures ORDER BY pictureid DESC LIMIT 0,5";

$result = $link -> query($sql);

$output_array = $result -> fetch_assoc();

var_dump($output_array);

$result -> free_result();

// Close connection

mysqli_close($link);

echo "Willkommen zurück   ", $_SESSION["username"], "  !";

?>

0
DodgeRT  19.05.2021, 17:39
@Mensch4
foreach($output_array as $row) {
    echo nl2br($row);
}

anstelle deines echos oben.... mit dem var_dump siehst ja, dass du was zurückb ekommst.... sieht jedenfalls so aus

0
Mensch4 
Fragesteller
 19.05.2021, 17:39
@DodgeRT

hier die config.php:

<?php

define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'picsone_picsone');
define('DB_PASSWORD', 'randompixeldude');
define('DB_NAME', 'picsone_picsone');
 
/* Attempt to connect to MySQL database */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>
0

SQL ist ein String und da kommen keine kommas etc hin weil es ein select insgesammt ist , ganz am ende ein semikolon wäre sinnvoll