2011-02-07 15 views
5

Ho un problema con la dichiarazione preparata UPDATE, ho cercato ovunque, ho sfogliato le domande qui e la sintassi sembra essere corretta, cosa mi manca?Problema con istruzione preparata UPDATE in PHP

$update_page = $db->stmt_init(); 
$update_page = $db->prepare (" 
UPDATE pages 
SET page_title = ?, meta_description = ?, meta_keywords = ?, $content = ? 
WHERE page_uri = ? 
"); 
$update_page->bind_param('sssss', $page_title, $meta_description, $meta_keywords, $content, $page_uri); 
$update_page->execute(); 

Questo mi tiri

Fatal error: Call to a member function bind_param() on a non-object

riferendosi alla linea 4 (uno sopra l'ultima riga).

@Gaurav: ecco il codice completo - ho in questa pagina sia istruzione SELECT e UPDATE, opere SELEZIONE:

if (!isset($page_uri)) 
    { 
    $page_uri = 'home'; 
    } 

if (isset($_POST['update'])) 
    { 
    $page_title = htmlspecialchars($_POST['page_title']); 
    $meta_description = htmlspecialchars($_POST['meta_description']); 
    $meta_keywords = htmlspecialchars($_POST['meta_keywords']); 
    $content = htmlspecialchars($_POST['content']); 

    $update_page = $db->stmt_init(); 
    $update_page->prepare (" 
    UPDATE pages 
    SET page_title = ?, meta_description = ?, meta_keywords = ?, $content = ? 
    WHERE page_uri = ? 
    "); 

    $update_page->bind_param('sssss', $page_title, $meta_description, $meta_keywords, $content, $page_uri); 
    $update_page->execute(); 
    } 


$select_page = $db->stmt_init(); 
$select_page = $db->prepare (" 
SELECT page_id, page_title, meta_description, meta_keywords, content, sidebar 
FROM pages 
WHERE page_uri = ? 
LIMIT 1 
"); 
$select_page->bind_param('s', $page_uri); 
$select_page->execute(); 
$select_page->bind_result($page_id, $page_title, $meta_description, $meta_keywords, $content, $sidebar); 
$select_page->fetch(); 
$page_title = htmlspecialchars_decode($page_title, ENT_QUOTES); 
$meta_description = htmlspecialchars_decode($meta_description, ENT_QUOTES); 
$meta_keywords = htmlspecialchars_decode($meta_keywords, ENT_QUOTES); 
$content = htmlspecialchars_decode($content, ENT_QUOTES); 
+0

Che cosa mostra il tuo phpinfo() in caso di mysqli? – egis

+0

btw, mostra il codice dove si avvia $ db oggetto. Potrebbe essere che nessun database sia selezionato;) – egis

+0

@egis - questo è l'intero codice: $ db = new mysqli (DBHOST, DBUSER, DBPASS, DATABASE); - su phpinfo(), che cosa dovrei cercare, ho installato mysqli, so che per un fatto, c'è qualcos'altro da tenere sotto controllo? – CodeVirtuoso

risposta

1

RISOLTO: Grazie mille ai ragazzi che mi aiutano. Dopo la navigazione in giro ho trovato la risposta qui:

Why do I get this function call error on an non-object when I am calling a function on an object?

Nizza intuizione può essere acquisita da upvoted risponde

In sostanza, se si fa var_dump ($ esempio) prima di bind_param(), scoprirete se l'oggetto viene restituito a tutti - nel mio caso non era - bool (falso), quindi ho reinspected la lettera SQL stessa lettera per lettera, e ho scoperto un errore di battitura, che puoi vedere nella mia domanda (colonna di nome $ contenuto invece del contenuto) - a volte non riesci a cogliere l'errore ad occhio nudo, quindi è bello avere una metodologia..bene sto imparando così :)

2

Si dovrebbe usare $update_page->prepare()

Fare riferimento alla this

Qualsiasi successiva le chiamate a qualsiasi funzione mysqli_stmt avranno esito negativo fino a quando non viene chiamato mysqli_stmt_prepare().

MODIFICA: utilizzare ssssi anziché sssss.

+0

Grazie Gaurav, ho letto la pagina collegata, ho provato qualche altra cosa e ancora non riesco a farla funzionare. Quando uso $ update_page-> prepare (con o senza query qui) ora sto ricevendo Warning: mysqli_stmt :: bind_param() [mysqli-stmt.bind-param]: oggetto o risorsa non valido mysqli_stmt – CodeVirtuoso

+0

Ciò che mi confonde di più è che la sintassi della mia domanda originale funziona bene con la query SELECT, pensavo di averlo capito. – CodeVirtuoso

+0

puoi pubblicare il codice completo. Può esserci qualche problema di sintassi. – Gaurav

Problemi correlati