2017-04-16 6 views
0

Ich versuche, eine SQL-Abfrage in eine vorbereitete Anweisung umschreiben. Diese Abfrage funktioniert gut, und mir die korrekte Ausgabe zu geben:binden vorbereitete Ergebnis nicht zurück Ausgabe

<?php 
    $sql = "SELECT * FROM stores ORDER BY RAND () LIMIT 3"; 
    $res = $mysqli->query($sql); 
    //print($res); 
    if ($res->num_rows > 0) { 
    // output data of each row 
    while($row = $res->fetch_assoc()) { 
     echo "id: " . $row["id"]. "<br>" . 
      "Headline: " . $row["head"]. "<br>". 
      "Description: " . $row["desc"]. "<br>";  
    } 
} else { 
    echo "0 results"; 
} 
?> 

Ich habe versucht, den obigen Code, um den Code unten neu zu schreiben, aber ich bin keine Ausgabe zu bekommen. Gibt es etwas, was ich total falsch mache?

-Code aktualisiert

<?php include 'dbconnection.php' ?> 

<?php 
error_reporting(E_ALL); ini_set('display_errors', 1); 

if (mysqli_connect_errno()) { echo "Error: no connexion allowed : " . mysqli_connect_error($mysqli); } 

$query = " SELECT id, headline, description FROM stores WHERE id=? AND headline=? AND description=? "; 
$stmt = $mysqli->prepare($query); 

$stmt->bind_param("iss",$id, $head, $desc); /* make sure that $id, $head, $desc are defined and that $id deserves a 'd' an not a 'i' */ 

$results = $stmt->execute(); 
$stmt->bind_result($id, $head, $desc); /* make sure you use all cols as you used SELECT (*) */ 
$stmt->store_result(); 

if ($stmt->num_rows > 0) { 
while($stmt->fetch()){ 
    echo"[ $id -> $head -> $desc ]<br />"; 
    } 
} 
else 
{ echo"[ no data ]"; } 

?> 
+1

benutzen Sie bitte 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'oben auf Ihren Seiten und lassen Sie uns wissen, wenn ein Fehler geworfen wird. Stellen Sie dann sicher, dass '$ id, $ head, $ desc 'definiert sind und dass $ id ein' d 'verdient. Schließen Sie schließlich die Vorbereitung mit ')' und 'print_r ($ result);' – OldPadawan

+0

Hallo. Ich habe die 'error_reporting (E_ALL) hinzugefügt; ini_set ('display_errors', 1); '. Ich habe meine Frage mit dem Fehler aktualisiert, den ich bekomme. – Mimi

+0

'$ result-> fetch_object' was ist mit' $ stmt-> execute(); $ stmt-> bind_result ($ col1, $ col2, ... und alle benötigten Spalten); $ stmt-> store_result(); if ($ stmt-> num_rows> 0) {while ($ stmt-> fetch()) {/ * weiterlesen * /} ' – OldPadawan

Antwort

2

EDIT: Nach mehr Untersuchung, da es tatsächlich zwei Seiten, und SELECT (auf der 2. Seite) muss zuletzt id von DB aus page1 I aktualisiert Antwort eingefügt:

<?php 

/* this code is for insert.php */ 

error_reporting(E_ALL); ini_set('display_errors', 1); 

$host = ""; /* your credentials here */ 
$user = ""; /* your credentials here */ 
$pwd = ""; /* your credentials here */ 
$db = ""; /* your credentials here */ 

/* store in PHP variables */ 

$head = $_POST["head"]; /* you can also perfom some checking on this data coming from user */ 
$desc = $_POST["desc"]; /* you can also perfom some checking on this data coming from user */ 
$place = $_POST["place"]; /* you can also perfom some checking on this data coming from user */ 

echo"[ $head/$desc/$place ]"; /* just checking values */ 

/* connexion to db */ 
$mysqli = mysqli_connect("$host", "$user", "$pwd", "$db"); 

if (mysqli_connect_errno()) { echo "Error: no connexion allowed : " . mysqli_connect_error($mysqli); } 

$query = " INSERT INTO `stores` (`headline`, `description`, `place`) VALUES (?, ?, ?) "; /* make sure all columns of DB match ! */ 

$stmt = $mysqli->prepare($query); /* prepare query */ 

$stmt->bind_param("sss", $head, $desc, $place); /* bind param will sanitize */ 

print_r($stmt->error_list); /* any error ? */ 
print_r($stmt->get_warnings()); 
print_r($stmt->error); 

if (!$stmt->execute()) { echo $stmt->error; } else { echo"[ successful insert ? -> true ]"; 

$last_id = $stmt->insert_id; echo"[ last ID ? -> $last_id ]"; echo"<a href=\"select_shuffle.php?id=$last_id\">GO TO SELECT/SHUFFLE PAGE</a>"; /* in order to get last inserted ID that will be needed next page */ 

/* header("Location: select_shuffle.php?id=$last_id"); -> can be performed only if no output before, otherwise you'll an error */ } 

?> 

dann, wählen Sie Seite:

<?php 

/* this code is for select_shuffle.php */ 

error_reporting(E_ALL); ini_set('display_errors', 1); 

$host = ""; /* your credentials here */ 
$user = ""; /* your credentials here */ 
$pwd = ""; /* your credentials here */ 
$db = ""; /* your credentials here */ 

/* store in PHP variable */ 

$id = $_GET["id"]; /* you can also perfom some checking on this data (is numeric ? (int) ?) */ 

echo"[ last insert ID -> $id ]"; /* just checking value */ 

// connexion to db 
$mysqli = mysqli_connect("$host", "$user", "$pwd", "$db"); 

if (mysqli_connect_errno()) { echo "Error: no connexion allowed : " . mysqli_connect_error($mysqli); } 

$query = " SELECT * FROM stores WHERE id=? "; 
$stmt = $mysqli->prepare($query); 

$stmt->bind_param("i",$id); /* here we make use of $var ID */ 

$results = $stmt->execute(); 
$stmt->bind_result($col1, $col2, $col3); /* make sure you use all cols as you used SELECT (*) */ 
$stmt->store_result(); 

if ($stmt->num_rows > 0) { 
while($stmt->fetch()){ 
echo"[ $col1 -> $col2 -> $col3 ]<br />"; /* here its echo'd but you do whatever you need */ 
} 
} 
else 
{ echo"[ no data ]"; } 

?> 
+0

Vielen Dank für die Zusammenfassung der Antworten dort ist gekommen. Ich habe meine Frage mit deinem Code aktualisiert. Wie ich es sehe, sollte es jetzt funktionieren, aber ich bekomme "keine Daten". Die ID ist ein 'int' in meiner Datenbank. – Mimi

+0

@Mimi: echo '$ id, $ Kopf, $ desc' vor der Verwendung (so stellen Sie sicher, dass alles wie erwartet kommt) und bei Bedarf ändern Sie' d' in 'i' – OldPadawan

+0

@Mimi: wie Sie' $ stmt-> bind_result ($ id, $ head, $ desc); 'als $ id/$ head/$ desc müssen Sie dann echo [$ id -> $ head -> $ desc]
"; 'auch – OldPadawan

0

Verwenden PDO Luke!

$b=$pdo->prepare(" SELECT FROM `table` WHERE `val1`=:val1 AND `val2`=:val2 "); 
$b->bindParam(":val1",$val1); 
$b->bindParam(":val2",$val2); 
$b->execute(); 
+0

OP fragt nicht nach einem anderen Weg, aber ... – OldPadawan

0

in Ihrem ersten Anweisung Sie die schließende Klammer fehlt)

$ stmt = $ mysqli-> prepare ("SELECT * FROM speichert WHERE id = AND Überschrift = AND description =?") ;

In der 4. Anweisung fehlt das Ende Semikolon;

$ result = $ stmt-> get_result(); siehe

, ob das hilft :)

+0

Vielen Dank für Ihren Kommentar. Ich habe gerade meine Frage mit einem Fehler aktualisiert, den ich bekomme. – Mimi

-1
<?php 

// '?' placeholders for variables 
$stmt = $mysqli->prepare("SELECT * FROM stores WHERE id=? AND headline=? AND description=?"); 

/* Bind result */ 
$stmt->bind_param($id, $head, $desc); 

// Execute prepared statement 
$stmt->execute(); 

/* Fetch values for each row */ 
$result = $stmt->get_result() 

while ($row = $result->fetch_object()) { 
    $result[] = $row;  
}  
echo $result; 

// Close statement       
$stmt->close(); 

// Close connection 
$mysqli->close(); 

?> 
+0

Das kann ich nicht richtig lesen, tut mir leid. – Mimi

+0

'bind_param' fehlt der erste Parameter – Terminus

Verwandte Themen