mySQL in CSV speichern - "mysql_num_rows() / mysql_fetch_row()" Fehler

raybrackho

Mitglied
Hey Leute,

ich habe ein Script, welches Werte aus meiner mySQL Datenbank auslesen soll und in einer .csv speichert.
Leider bekomme ich dabei zwei Fehlermeldungen:

Code:
Warning:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/.../html/SALES/sales_db_csv.php on line 19

Warning:  mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/.../html/SALES/sales_db_csv.php on line 28

Hier der Code meines Scripts:
Code:
<?php
$host = 'localhost';
$user = 'mein-user';
$pass = '#mein-pw';
$db = '#meine-db';
$table = 'order';
$file = 'export';

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/csv");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");

$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field']."; ";
$i++;
}
}
$csv_output .= "\n";

$values = mysql_query("SELECT shipping_firstname, shipping_lastname, shipping_address_1, shipping_address_2, shipping_postcode, shipping_city, shipping_country FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j]."; ";
}
$csv_output .= "\n";
}

print $csv_output;
exit;
?>

Jemand eine Idee?
Die Daten zu meiner DB sind auf jeden Fall korrekt, auch gibt es in der DB eine Tabelle mit dem Namen "order".

Danke schonmal!
Moritz
 
Ist da nicht immer am Ende der SQL-Anweisung ein doppeltes Anführungszeichen zu viel?

Übergib die Anweisung doch mal zuerst an eine Variable und gib diese dann mit echo am Bildschirm aus. Dann siehst du sicher besser was daran falsch ist.

Die Zeile 19 müsste ja diese:

PHP:
$result = mysql_query("SHOW COLUMNS FROM ".$table."");

und die Zeile 28 müsste diese:

PHP:
$values = mysql_query("SELECT shipping_firstname, shipping_lastname, shipping_address_1, shipping_address_2, shipping_postcode, shipping_city, shipping_country FROM ".$table."");

sein.
 
Zuletzt bearbeitet:
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 
Hey, danke für die schnellen Antworten.

Also das mit den Anführungszeichen ist glaub ich so schon in Ordnung. Ist ja eine Variable zwischengeschoben und der Teil zwischen den "" (nämlich nichts) wird dann einfach wieder drangehängt.

Zur Fehlersuche, ein sehr nettes Tutorial.
Ich habe festgestellt, dass ich selbst in phpmyadmin meine Tabelle nicht selektiert kriege.
Als Fehler bekomme ich
Code:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order' at line 1
 
Witzig,

wenn ich in phpmyadmin statt
Code:
SELECT shipping_firstname, shipping_lastname, shipping_address_1, shipping_address_2, shipping_postcode, shipping_city, shipping_country FROM 'order'

Code:
SELECT shipping_firstname, shipping_lastname, shipping_address_1, shipping_address_2, shipping_postcode, shipping_city, shipping_country FROM `order`

schreibe, dann klappt die selektierung. Aber mein Script schmeisst trotzdem noch den gleichen Fehler raus.
 
PHP:
"SHOW COLUMNS FROM ".$table.""

Wenn man für $table jetzt den Wert order einsetzt, erhält man folgenden String zurück

SQL:
SHOW COLUMNS FROM order"

und das kann nicht gehen.

NACHTRAG:
Außerdem was mit gerade auffält, mit ORDER werden Daten sortiert!!
 
Zuletzt bearbeitet:
Ändere deinen Code mal so:
PHP:
$sql = "SELECT shipping_firstname, shipping_lastname, shipping_address_1, shipping_address_2, shipping_postcode, shipping_city, shipping_country FROM `" .$table ."`";
$values = mysql_query($sql);
 
SHOW COLUMNS FROM ORDER"

Aber schließt nicht das erste " den Bereich von SELECT...FROM, dann kommt die Variable und dann nochmal (eigenständig) zwei "" (Anführungszeichen) ?

<b>NACHTRAG</b>
Sorry, ich hatte bei der Variablendeklaration die Zeichen ausgetauscht. Mein Fehler!

Code:
$table = 'order'; in $table = `order`;

Das ist natürlich blödsinn.
 
Zuletzt bearbeitet:
Zurück