SELECT - WHERE mit Variable

Ich hoffe ich hab das jetzt mal richtig hingekriegt:

bei echo result1 gibt er mir aus

PHP:
Resource id #11

der Error dazu wäre - 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 'Resource id #11' at line 1


bei echo result

PHP:
Resource id #13

der Error dazu wäre - 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 'Resource id #13' at line 1


ich hab jetzt nochmal versucht die Fehlermeldungen irgendwie zu verstehen, aber Fehlanzeige.
Das hier wird dich wohl auch nicht weiterbringen oder? (Sofern ich die Auslese richtig gemacht habe)
 
Query-String, nicht Query-Result

PHP:
$sql = "SELECT id FROM $db_table WHERE id IN (".implode(',', $app_friends).") ORDER BY score ASC";
echo $sql;
$result1 = mysql_db_query($db_name,$sql);

Ich werd wohl meine Anleitungen noch weiter ausdeutschen müssen.

@bwilly
Das Problem wird mit implode gelöst. Siehe Antworten weiter oben
 
Zuletzt bearbeitet:
Also ich habe mal alles so umgebaut wie du grad beschrieben hast. Is auch übersichtlicher! ;-))

PHP:
<?
error_reporting(E_ALL);
include_once ("_data.php");

$conn = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$conn);

	$sql = "SELECT id FROM $db_table WHERE id IN (".implode(',', $app_friends).") ORDER BY score ASC";
//echo $sql;
	$result1 = mysql_db_query($db_name,$sql); 
//mysql_query($result1)  or die(mysql_error());

$num = 1;
while($r = mysql_fetch_object($result1))
{
	$sql2 = "SELECT * FROM $db_table WHERE id='{$r->id}'";
echo $sql2;
	$result2 = mysql_db_query($db_name,$sql2); 
//mysql_query($result1)  or die(mysql_error());

	$resultArray = mysql_fetch_array($result2);
	$name = $resultArray["name"];
	$firstname = $resultArray["firstname"];
	$score = $resultArray["score"];
	$pic = $resultArray["pic"];
		
	if ($num<=$st_size) {
			if ($flash=1) {
				//echo "&name$num=$name&firstname$num=$firstname&score$num=$score&pic$num=$pic";
			}
			$num++;
	}
}
mysql_close ($conn);
?>

Beim ersten sql krieg ich folgendes:

Code:
SELECT id FROM highscores_game WHERE id IN (1530469148,100000538953504) ORDER BY score ASC

Schonmal gut wie ich finde... da $app_friends zwei Einträge enthält.

Der Error hierfür wäre

Code:
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 'Resource id #11' at line 1


Beim sql2 krieg ich:

Code:
SELECT * FROM highscores_games WHERE id='1530469148'

Dies wäre das erste Ergebnis aus dem $app_friends bei einen Durchlauf in der while Schleife. Ansich ja auch ok!

Der Error hierzu:

Code:
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 'Resource id #11' at line 1


Ich muss aber trotzdem noch dazu sagen das ich deine Geduld nicht unötig strapazieren will. ;-) Wenns zuviel wird..... ;-)
 
Die SQLs sehen eigentlich ganz anständig aus.
Was für ein Feldtype hat das Feld id?

Aber wennd u das zweite sql bekommen hast, scheint das erste durchgelaufen zu sein.
Wenn in der Tabelle keine geheimen Daten sind, währe es ev. Hilfreich wenn du mir einen Dump zur Verfügung stellst. Dann kann ich das mal durchgehen.

phpMyAdmin -> deine DB wählen -> Die Tabelle 'highscores_games' auswählen -> Tab 'Export' wählen -> Export als SQL mit Structure und Date.
Das als File speichern und hier mal anhägen.

Zudem frag ich mich, wozu du das 2te Query hast. Die Infos die du da ausliest sind doch alle in $r enthalten.
 
Da hast du allerdings recht mit der 2ten query. Das hab ich mich auch schon gefragt.

Zudem muss ich zugeben das dies ein Highscore Script von Flashkit ist das ich eben versucht habe anzupassen. Das aber ja auch funktioniert, wäre da nicht $app_friends.

Wiederum zugeben muss ich das das jetzige id Feld in meiner DB nicht auto_inc. gestellt ist da ich darin eine UserID speichere. Ich habe mal probehalber nun noch ne DB_id Spalte angelegt mit auto_inc.

Könnte das eventuell auch zu Problemen führen?


//EDIT:

Das mit der 2ten query denk ich is notwendig um die anderen Datensätze aus der DB zu holen oder? Also name, score usw. Also alle die mit der ID aus der $app_friends übereinstimmen. Wenn ich das jetz richtig rausgelesen habe.
Wenn ich das WHERE id='{$r->id}' richtig deute heißt das doch "istgleich"?
 

Anhänge

Zuletzt bearbeitet:
Im echo deines SQLs greifst du auf eine Tabelle 'highscores_game' zu. Im Dump seh ich aber die Tabelle mit dem Namen 'highscores_games'

Ich habe mal die Tabelle in meine Test-DB gespielt und dein Script etwas verkürzt / angepasst.

PHP:
<?
error_reporting(E_ALL);

$conn = mysql_connect('localhost','root','');
mysql_select_db('test');

$db_table = 'highscores_games';
$app_friends = array('1530469148', '100000538953504');

//mysql_escape_string(): Reine Sicherheitsroutine. Ist empfehlenswert
$appFriendsSqlIdList = implode(',', array_map('mysql_escape_string', $app_friends));

$sql = "SELECT * 
        FROM {$db_table}
        WHERE id IN ($appFriendsSqlIdList) 
        ORDER BY score ASC";
$result = mysql_query($sql); 

$num = 1;
while($row = mysql_fetch_object($result))
{
    $name = $row->name;
    $firstname = $row->firstname;
    $score = $row->score;
    $pic = $row->pic;
    
    //TODO irgnedwas mit deinem Flash
    echo "name: {$name}<br />\n";
    echo "firstname: {$firstname}<br />\n";
    echo "score: {$score}<br />\n";
    echo "pic: {$pic}<br />\n";
}
mysql_free_result($result);
mysql_close ($conn);
?>
 
Zuletzt bearbeitet:
Danke dir.... kriegste mal n Bier wennde nach München kommst. ;-))

Wichtig ist erstmal das das Script schön aufgeräumt ist und alles unötig rausfliegt. Dennoch gehts leider immer noch nicht.
Ich habe das Problem nun auch mal im Flashforum gepostet weil ich mittlerweile ncith mehr weiß obs an Flash oder an PHP liegt.

Hier nochmal mein 2tes Script an dem ich noch n bischen was ändern musste (an deinem Vorschlag)

PHP:
<?
error_reporting(E_ALL);

include_once ("_data.php");

//$app_friends = implode(',', array_map('mysql_escape_string', $app_friends_session));

$conn = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$conn);

$app_friends_session=$_SESSION['f_app_friends'];
$app_friends = $app_friends_session;

//mysql_escape_string(): Reine Sicherheitsroutine. Ist empfehlenswert
$appFriendsSqlIdList = implode(',', array_map('mysql_escape_string', $app_friends));

$sql = "SELECT * 
        FROM {$db_table}
        WHERE id IN ($appFriendsSqlIdList)
        ORDER BY score ASC";
$result = mysql_query($sql); 

echo $sql;

$num = 1;
while($row = mysql_fetch_object($result))
{
    $f_name = $row->name;
    $f_firstname = $row->firstname;
    $f_score = $row->score;
    $f_pic = $row->pic;
        
	if ($num<=$st_size) {
			if ($flash=1) {
       		//echo "name: {$name}<br />\n";
    		//echo "firstname: {$firstname}<br />\n";
    		//echo "score: {$score}<br />\n";
    		//echo "pic: {$pic}<br />\n";
    		echo "&f_name$num=$f_name&f_firstname$num=$f_firstname&f_score$num=$f_score&f_pic$num=$f_pic";
			}
	$num++;
	}
}
mysql_free_result($result);
mysql_close ($conn);
?>

Jetzt hole ich mir die Variable $app_users über eine $_SESSION. Ausgabe über echo war komplett richtig.

Dennoch bekomme ich nur UNDEFINIED in Flash angezeigt.
Ich weiß einfach nicht mehr weiter, und kann aber auch nicht den kleinsten Fehler in dem Script endecken!

Wobei er mir wenn ich dieses Script im Browser aufrufe folgendes bringt:

PHP:
Notice: Undefined variable: _SESSION in /www/htdocs/get_friend_score.php  on line 11

Warning: array_map() [function.array-map]: Argument #2 should be an array in /www/htdocs/get_friend_score.php on line 15

Warning: implode() [function.implode]: Invalid arguments passed in /www/htdocs/get_friend_score.php on line 15
SELECT * FROM highscores_Memory WHERE id IN () ORDER BY score ASC
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /www/htdocs/get_friend_score.php on line 26

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /www/htdocs/get_friend_score.php on line 44

Zum Beispiel "Undefined variable: _SESSION" kann ich nicht verstehen wenn er mir mit echo exakt die Daten anzeigt!
 
Zuletzt bearbeitet:
Jetzt bin ich glaub ich so nah dran wie noch nie! ^^

Wenn ich statt
PHP:
$sql = "SELECT * 
        FROM {$db_table}
        WHERE id IN ('$appFriendsSqlIdList')
        ORDER BY score ASC";
$result = mysql_query($sql);

das hier eingebe:

PHP:
$sql = "SELECT * 
        FROM {$db_table}
        WHERE id IN ('1530469148,100000538953504')
        ORDER BY score ASC";
$result = mysql_query($sql);

heißt die zwei Variablen die ich durch $app_friends bekomme wird alles korekt angezeigt. Bedeutet also der Fehler bzw. das problem muss irgendwie in
PHP:
WHERE id IN ('$appFriendsSqlIdList')
bzw. in
PHP:
$appFriendsSqlIdList = implode(',', array_map('mysql_escape_string', $app_friends));
liegen!
 
debuggen.
Wie sieht $sql beim fehlerhaften aus?

Deine rstes SELECT ist sicher falsch.
SQL:
id IN ('1530469148,100000538953504')
Das sucht nach der einen id '1530469148,100000538953504' und nicht nach 2.
 
genau so is es....
wenn ich

PHP:
'1530469148','100000538953504'
eingebe geht dat.

Jetzt probier ich die ganze zeit schon die ',', zu ändern in

PHP:
implode("','", array_map('mysql_escape_string', $app_friends))

Mit diesem Code krieg ich im echo
PHP:
1530469148','100000538953504

heißt mir fehlen die ' am Anfang und am Ende noch! Jetzt brauch ich nur noch nen kleinen Anstupser.....
 
Zurück