2011-02-07 12 views
5

Tengo un problema con la declaración preparada de ACTUALIZACIÓN, busqué en todas partes, examiné las preguntas aquí y la sintaxis parece ser la correcta, ¿qué me estoy perdiendo?Problema con la declaración preparada de ACTUALIZACIÓN en 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(); 

Esto me tiros

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

refiriéndose a la línea 4 (una encima de la última línea).

@Gaurav: aquí está el código completo - Tengo en esta página tanto instrucción SELECT y UPDATE, obras SELECT:

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

¿Qué muestra tu phpinfo() en caso de mysqli? – egis

+0

por cierto, muestre el código donde inicia el objeto $ db. Puede ser que no se haya seleccionado ninguna base de datos;) – egis

+0

@egis - este es el código completo: $ db = new mysqli (DBHOST, DBUSER, DBPASS, DATABASE); - Acerca de phpinfo(), ¿qué debo buscar, tengo instalado mysqli, sé que, de hecho, hay algo más que cuidar? – CodeVirtuoso

Respuesta

1

SOLUCIONADO: Muchas gracias a los chicos que me están ayudando. Después de navegar alrededor encontré la respuesta aquí:

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

Niza visión se puede obtener de upvoted responde

Básicamente, si lo hace var_dump ($ ejemplo) antes de bind_param(), se dará cuenta si el objeto es devuelto en absoluto, en mi caso no fue - bool (falso), así que reinspectré la letra de la consulta SQL para la carta, y descubrí un error tipográfico, que puedes ver en mi pregunta (columna llamada $ content en lugar de contenido) - a veces simplemente no puedes ver el error a simple vista, así que es bueno tener una metodología ... bueno, estoy aprendiendo así :)

2

Se deben utilizar $update_page->prepare()

Consulte this

Cualquier subsiguiente las llamadas a cualquier función mysqli_stmt fallarán hasta que se llame a mysqli_stmt_prepare().

EDITAR: Use ssssi en lugar de sssss.

+0

Gracias Gaurav, he leído la página vinculada y he probado algunas cosas más, y todavía no puedo hacer que funcione. Cuando uso $ update_page-> prepare (con o sin consulta aquí) ahora obtengo Warning: mysqli_stmt :: bind_param() [mysqli-stmt.bind-param]: objeto no válido o recurso mysqli_stmt – CodeVirtuoso

+0

Lo que más me confunde es que la sintaxis de mi pregunta original funciona bien con la consulta SELECT, pensé que la obtuve. – CodeVirtuoso

+0

puede publicar el código completo. Puede algún problema de sintaxis está ahí. – Gaurav

Cuestiones relacionadas