View Full Version : [PHP] Problemi con MySQL
birmarco
26-01-2012, 21:33
Ciao a tutti!
Ho un problema a far interagire PHP con MySQL. Il codice è questo:
$conn = mysqli_connect("localhost", "db_name", "psw", "***");
$stmt = $conn->prepare("INSERT INTO A(Titolo, Contatto, Descrizione) VALUES(?, ?, ?)");
$contatto = "Prova";
$title = $_POST['titolo'];
$descr = $_POST['descrizione'];
$stmt->bind_param("sss", $title, $contatto, $descr);
$stmt->execute();
I dati li prende da un form, quando faccio submit mi dà questo errore:
Fatal error: Call to a member function bind_param() on a non-object on line 88
Che sarebbe la linea di bind_param. I parametri vengono prelevati correttamente dal form, ho già controllato. Purtroppo rimango inchiodato qui.
PS. Ovviamente i dati di accesso al DB non sono quelli, li ho solo oscurati ;)
Gimli[2BV!2B]
26-01-2012, 23:29
$stmt non è un oggetto, probabilmente è null o giù di lì.
Questo implica che $conn->prepare sia fallita.
Il prepare viene però processato, quindi $conn è valida.
Controlla con cura l'SQL, è estremamente probabile che ci sia un errorino nei nomi dei campi o nel nome della tabella stessa.
birmarco
27-01-2012, 09:10
;36808390']$stmt non è un oggetto, probabilmente è null o giù di lì.
Questo implica che $conn->prepare sia fallita.
Il prepare viene però processato, quindi $conn è valida.
Controlla con cura l'SQL, è estremamente probabile che ci sia un errorino nei nomi dei campi o nel nome della tabella stessa.
Grazie! Ho fatto un po' di controlli, in realtà è un sacco che ci sbatto contro a questa cosa ma non ne vengo a capo. Ho provato in mile maniere diverse ma non capisco!
I campi hanno il nome corretto, idem per la tabella. Ho provato anche a fare una select ma non funziona neanche quella:
$conn = mysqli_connect("localhost", "****", "****", "****");
$stmt = $conn->prepare("SELECT Titolo, Contatto, Descrizione FROM a");
$stmt->execute();
$stmt->bind_result($A, $B, $C);
print $A;
print $B;
print $C;
Mi dà errore sempre sulla bind! :(
Cmq l'errore è sicuramente in prepare quindi? Anche se a me sembra tutto corretto. Se eseguo quelle query in sql direttamente sul database funzionano perfettamente.... :confused:
Scusa ma come fa a darti lo stesso errore?? Nel primo codice l'errore era sulla chiamata a bind_param(). Ma nell'ultimo codice che hai postato non c'è nessuna bind_param() quindi di sicuro il messaggio di errore deve quantomeno essere diverso... :confused:
Tra l'altro, dopo la bind_result() e prima delle print dovresti chiamare $stmt->fetch() altrimenti le tre variabili A, B e C rimangono vuote...
birmarco
27-01-2012, 16:49
Scusa ma come fa a darti lo stesso errore?? Nel primo codice l'errore era sulla chiamata a bind_param(). Ma nell'ultimo codice che hai postato non c'è nessuna bind_param() quindi di sicuro il messaggio di errore deve quantomeno essere diverso... :confused:
Tra l'altro, dopo la bind_result() e prima delle print dovresti chiamare $stmt->fetch() altrimenti le tre variabili A, B e C rimangono vuote...
Si, hai ragione! :) :) Infatti come dici tu funziona tutto perfettamente. Avevo dimenticato di inserire stmt fetch. ;) Cmq l'errore era diverso, sempre sulla bind, ma quell'altra. La bind result
Per l'inserimento valori ancora niente però :(
Quali sono i possibili problemi? Così controllo uno per uno
Torniamo al codice di partenza...
Comincia a cambiare il codice in questo modo e vediamo cosa ti viene fuori:
$conn = mysqli_connect("localhost", "db_name", "psw", "***");
$stmt = $conn->prepare("INSERT INTO A(Titolo, Contatto, Descrizione) VALUES(?, ?, ?)");
if(!$stmt)
{
printf("Errormessage: %s\n", $mysqli->error);
}
else
{
$contatto = "Prova";
$title = $_POST['titolo'];
$descr = $_POST['descrizione'];
$stmt->bind_param("sss", $title, $contatto, $descr);
$stmt->execute();
//. . . bla bla bla bla
}
$conn->close();
Così almeno cerchiamo di capire perchè la prepare() fallisce...
P.S. Diamo per buono che la connect non fallisca...
birmarco
28-01-2012, 15:15
Torniamo al codice di partenza...
Comincia a cambiare il codice in questo modo e vediamo cosa ti viene fuori:
$conn = mysqli_connect("localhost", "db_name", "psw", "***");
$stmt = $conn->prepare("INSERT INTO A(Titolo, Contatto, Descrizione) VALUES(?, ?, ?)");
if(!$stmt)
{
printf("Errormessage: %s\n", $mysqli->error);
}
else
{
$contatto = "Prova";
$title = $_POST['titolo'];
$descr = $_POST['descrizione'];
$stmt->bind_param("sss", $title, $contatto, $descr);
$stmt->execute();
//. . . bla bla bla bla
}
$conn->close();
Così almeno cerchiamo di capire perchè la prepare() fallisce...
P.S. Diamo per buono che la connect non fallisca...
Sono riuscito a risolvere! :) Il problema era nel database! Io ho convigurato la base di dati da workbench sul PC e poi ho caricato il dump sul server dell'host. Peccato che con il caricamento mi abbia cambiato i nomi delle tabelle mettendo tutto minuscolo. Io mi basavo sui nomi che avevo dato in workbench quando invece sull'host erano diversi! :doh: L'ho scoperto così per caso quando sono andato su phpmyadmin a provare alcune query :mad: Però non dovrebbe cambiarti i nomi così di testa sua perchè altrimenti uno fa un lavoro e poi le cose non gli funzionano più e non capisce perchè! :mad:
Grazie a tutti dell'aiuto!
Mai sentita una roba del genere :confused:
Vabbè l'importante è che hai risolto :D
birmarco
28-01-2012, 17:58
Mai sentita una roba del genere :confused:
Vabbè l'importante è che hai risolto :D
Già... per quello che impazzivo!! Chi andrebbe mai a pensare una cosa così... :rolleyes: Ora però ho finalmente risolto... impazzivo! :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.