Newsgroup: it.comp.www.php
Titolo: Errormessage: Commands out of sync; you can't run this command now

uff. scusate, ma sto cercando di passare da mysql a mysqli , visto che 
mysql è deprecated 
 
allora , mi pare che due query non me le faccia eseguire. 
 
ho la prima 
 
$mydb = new mysqli('localhost', 'user', 'password','db_name');
 
$qcatp ="SELECT * FROM notizie INNER JOIN pagine ON 
notizie.idNotizie=pagine.idNotizie WHERE notizie.idNotizie='".
$_GET['id']."'";
 
e la seconda 
 
	$qpaginen="SELECT * FROM pagine WHERE idNotizie='".$id."'";
 
		if (!mysqli_query($mydb, $qpaginen)) {
    printf("Errormessage: %s\n", mysqli_error($mydb));
}
 
qui mi da 
Errormessage: Commands out of sync; you can't run this command now 
 
ho fatto un paio di ricerche su google, ho letto du bug, ma credo si a 
più un errore mio 
can you help me?
 
 
grazie
 

 can you help me?
 
Hai cercato 'php mysqli "Commands out of sync"'?
 
-- 
Andrea
 

 
si , ma confesso che c'ho capito poco comunque 
qui 
http://it1.php.net/manual/it/mysqli.query.php
 
 c'è scritto 
 
/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT 
*/
if ($result = mysqli_query($link, "SELECT * FROM City", 
MYSQLI_USE_RESULT)) {
 
    /* Note, that we can't execute any functions which interact with 
the
       server until result set was closed. All calls will return an
       'out of sync' error */
    if (!mysqli_query($link, "SET @a:='this will not work'")) {
        printf("Error: %s\n", mysqli_error($link));
    }
    mysqli_free_result($result);
}
 
mysqli_close($link);
 
 
quindi mi pare di capire che se non chiudo la connessione al database , 
no me ne fa fare un altra query.
 
quindi ho scritto 
 
$mydb = new mysqli('localhost', 'user', 'password','db_name');
 
$qcatp ="SELECT * FROM notizie INNER JOIN pagine ON 
notizie.idNotizie=pagine.idNotizie WHERE notizie.idNotizie='".
$_GET['id']."'";
 
mysqli_close($mydb);<<<<<<<<<<<<<-----------
 
nuovamente 
 
$mydb = new mysqli('localhost', 'user', 'password','db_name');<<<<<---
 
e la seconda 
 
        $qpaginen="SELECT * FROM pagine WHERE idNotizie='".$id."'";
 
                if (!mysqli_query($mydb, $qpaginen)) {
    printf("Errormessage: %s\n", mysqli_error($mydb));
}
 
 
 
mysqli_close($mydb); <<<<< questo è sempre meglio metterlo giusto? son 
sincero non lo avevo mai inserito negli script  e in 11 anni non ho mai 
avuto problemi su mysql 
 
 
comunque c'è un modo differente senza richiudere la connessione e poi 
riaprirla?  dove posso guardare?

 no me ne fa fare un altra query.
 
 
No, devi chiudere solo il result, non la connessione
 
"If you use MYSQLI_USE_RESULT all subsequent calls will return error 
Commands out of sync unless you call mysqli_free_result()"

 Commands out of sync unless you call mysqli_free_result()"
 
ecco, mi pare meglio .. grazie :)
 
enrico 

 $_GET['id']."'";
 
Qui hai un buco di sicurezza medio-grande. Usare mysqli non ti para il 
culo dalla SQL injection.
 
Con PDO:
 
$conn = new PDO(...);
 
$stmt = $conn->prepare('SELECT * FROM notizie INNER JOIN pagine ON 
notizie.idNotizie=pagine.idNotizie WHERE notizie.idNotizie=:id');
 
$stmt->execute(array('id'=>$_GET['id']));
 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
 
...
 
Come vedi non c'è niente di difficile, e hai protezione da SQL-injection 
gratis.
 
Anzi, il fetchAll() ti carica tutto il resultset in un array di array 
associativi, così eviti anche il commands out of sync (a prezzo di usare 
più RAM, naturalmente, come con mysqli) e puoi ciclare direttamente con 
un 
 
foreach ($result as $row) { ... }
 
 
 
Bye.

 culo dalla SQL injection.
 
grazie, non ho mai usato PDO, fino ad adesso mysql_ mi ha dato problemi 
zero.
 
studiero al riguardo .
 
Enrico 
 

 il posteriore perchè non so quanti siti ho da aggiornare.
 
Intendevo: perché mysqli? :)
 
Se devi cambiare sistema, passa direttamente a PDO, così almeno astrai 
direttamente la connessione al DB.
 
So che mysqli ha qualche vantaggio rispetto a PDO (vi sfido a scoprirlo e 
soprattutto a usarlo :P), ma secondo me non vale la pena.
 
Bye.