Problema con MySQL e PHP, dopo aver fatto una SELECT non ottengo alcun risultato

hud468

Nuovo Utente
5 Ago 2013
4
0
0
Salve a tutti, sono nuovo del forum e di PHP, da due giorni sto impazzendo dietro ad un problema, piuttosto comune (guardando nei vari forum), a cui non riesco trovare soluzione. Il codice è semplicissimo, mi collego al database e voglio fare una SELECT della tabella "users". Che puntualmente fallisce.
Ho provato ad eseguire una CREATE TABLE ed una INSERT e funzionano.
La SELECT invece non funziona e di conseguenza mi ritorna un valore NULL e la funzione mysql_count_rows mi ritorna un errore. Ora, non so dove sbattere la testa, la query è semplicissima e la tabella contiene già tre record.
Non credo sia un problema di permessi, poiché entro come root. Qualche consiglio?
Grazie in anticipo.

PHP:
<?php


try {
    $db = new PDO ("mysql:host=localhost;dbname=test_db", "root", "");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec('SET NAMES "utf8"');
    echo "Connected to the server <br />";
}

catch (PDOException $e){
    $output = $e.getMessage();
    echo $output;
    exit();
}



$sql = "SELECT * FROM users";
var_dump($sql);
echo '<br />';

$result = $db->query($sql);
var_dump($result);


echo '<br />';

if (is_resource($result))
{
   echo "it is a resource indeed...";
}


$count=mysql_num_rows($result);
var_dump($count);

echo '<br />'.$count;
echo mysql_error();
?>


Quello che ottengo è:

Connected to the server
string(19) "SELECT * FROM users"
object(PDOStatement)#2 (1) { ["queryString"]=> string(19) "SELECT * FROM users" }

Warning: mysql_num_rows() expects parameter 1 to be resource, object given in C:\xampp\htdocs\backend\index.php on line 36
NULL
 
ciao
secondo me stai facendo un minestrone mescolando le istruzioni della classe PDO con le vecchie istruzione mysql.
o usi un metodo o l'altro

prova a correggere così
PHP:
<?php
try {
    $db = new PDO ("mysql:host=localhost;dbname=prove", "root", "password");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec('SET NAMES "utf8"');
    echo "Connected to the server <br />";
}catch (PDOException $e){
    $output = $e.getMessage();
    echo $output;
    exit();
}
$sql = "SELECT * FROM users";
var_dump($sql);
echo '<br />';
$result = $db->query($sql);
var_dump($result);
echo '<br />';
if (is_resource($result)){
   echo "it is a resource indeed...";
   $count=$result->rowCount();
	var_dump($count);
	echo '<br />'.$count;
}else{
	echo "is not a resource...";
}
?>
 
Ultima modifica:
ciao
secondo me stai facendo un minestrone mescolando le istruzioni della classe PDO con le vecchie istruzione mysql.
o usi un metodo o l'altro

prova a correggere così
PHP:
<?php
try {
    $db = new PDO ("mysql:host=localhost;dbname=prove", "root", "password");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec('SET NAMES "utf8"');
    echo "Connected to the server <br />";
}catch (PDOException $e){
    $output = $e.getMessage();
    echo $output;
    exit();
}
$sql = "SELECT * FROM users";
var_dump($sql);
echo '<br />';
$result = $db->query($sql);
var_dump($result);
echo '<br />';
if (is_resource($result)){
   echo "it is a resource indeed...";
   $count=$result->rowCount();
	var_dump($count);
	echo '<br />'.$count;
}else{
	echo "is not a resource...";
}
?>

Grazie della risposta, ho provato col codice che hai postato, purtroppo continua a non funzionare. Quello che ottengo è questo:

Connected to the server
string(19) "SELECT * FROM users"
object(PDOStatement)#2 (1) { ["queryString"]=> string(19) "SELECT * FROM users" }
is not a resource...
 
ciao
sei sicuro che la tabella si chiami users?
l'ho provato e funzia (la mia tabella di pova si chiama utenti) è mi da 32 cioè i record che ci sono
 
ciao
sei sicuro che la tabella si chiami users?
l'ho provato e funzia (la mia tabella di pova si chiama utenti) è mi da 32 cioè i record che ci sono

La tabella si chiama users. Come ho scritto sopra ho provato altre query come INSERT (proprio sulla tabella users) e CREATE TABLE e funzionano.
La tabella consiste di 3 semplici campi (id, username, passwrd).
Ho provato a fare girare il codice anche sul portatile in locale e il risultato era sempre lo stesso.
 
ciao
hai ragione ho fatto un errore nel copy/paste
sostitisci
is_resource($result)
con
is_object($result)
con le pdo $result è un oggetto non una risorsa, risorsa è con mysql
dimenticavo
puoi fare anche solo
if ($result){
perchè query($sql) ritorna FALSE in caso di errore
 
Ultima modifica:
ciao
hai ragione ho fatto un errore nel copy/paste
sostitisci
is_resource($result)
con
is_object($result)
con le pdo $result è un oggetto non una risorsa, risorsa è con mysql
dimenticavo
puoi fare anche solo
if ($result){
perchè query($sql) ritorna FALSE in caso di errore

Ciao, adesso funziona. Sia con il nuovo codice che quello che non funzionava ieri. Non ho fatto alcun cambiamento per il resto. Sono un tantino perplesso :-), essendo un principiante, mi chiedo se siano già capitati problemi del genere.
Grazie mille comunque per il supporto!!

Gregorio
 

Discussioni simili