2011-02-07 27 views
5

Mam problem z UPDATE przygotowane oświadczenie, spojrzał wszędzie, przejrzeli tu pytania, a składnia wydaje się być poprawna, co mi brakuje?Problem z UPDATE przygotowane oświadczenie w 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(); 

To rzuca mi

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

odnosząc się do linii 4 (jeden powyżej ostatniego wiersza).

@Gaurav: tu jest kompletny kod - Mam na tej stronie zarówno SELECT i UPDATE oświadczenia, prace Wybierz:

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

Co pokazuje twoje phpinfo() w przypadku mysqli? – egis

+0

btw, pokaż kod, w którym zainicjowałeś obiekt $ db. Być może nie wybrano żadnej bazy danych;) – egis

+0

@egis - to jest cały kod: $ db = new mysqli (DBHOST, DBUSER, DBPASS, DATABASE); - o phpinfo(), czego powinienem szukać, mam zainstalowany mysqli, wiem, że na pewno jest coś jeszcze do zaopiekowania? – CodeVirtuoso

Odpowiedz

1

SOLVED: Dzięki za pomoc dla facetów, którzy mi pomagają. Po przejrzeniu całego znalazłem odpowiedź tutaj:

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

Nicea wgląd można uzyskać od upvoted odpowiada na

Zasadniczo, jeśli nie var_dump ($) przed bind_param przykład(), dowiesz się jeśli obiekt jest zwracany w ogóle - w moim przypadku nie był - bool (false), więc ponownie przetestowałem zapytanie SQL na literę i znalazłem głupie literówki, które widzisz w moim pytaniu (kolumna o nazwie $ content zamiast treści) - czasami po prostu nie możesz złapać błędu gołym okiem, więc miło jest mieć metodologię ... dobrze się uczę :)

2

Należy używać $update_page->prepare()

Patrz this

Wszelkie późniejsze wywołania do jakiejkolwiek funkcji mysqli_stmt zakończy się niepowodzeniem, dopóki nie zostanie wywołana funkcja mysqli_stmt_prepare().

EDYCJA: Użyj ssssi zamiast sssss.

+0

Dzięki Gaurav, przeczytałem linkowaną stronę i spróbowałem jeszcze kilku rzeczy, ale nadal nie mogę jej uruchomić. Kiedy używam $ update_page-> prepare (oba z zapytaniem lub bez) otrzymuję teraz Ostrzeżenie: mysqli_stmt :: bind_param() [mysqli-stmt.bind-param]: nieprawidłowy obiekt lub zasób mysqli_stmt – CodeVirtuoso

+0

Co wprowadza mnie w błąd jest to, że składnia z mojego pierwotnego pytania działa dobrze z zapytaniem SELECT, myślałem, że mam to. – CodeVirtuoso

+0

możesz opublikować pełny kod. Może jakiś problem z składnią. – Gaurav

Powiązane problemy