2011-02-07 3 views
5

У меня проблема с подготовленным оператором UPDATE, просмотренным повсюду, просматривается здесь вопрос, и синтаксис кажется правильным, чего я не вижу?Проблема с подготовленным оператором UPDATE в 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(); 

Это бросает мне

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

со ссылкой на линию 4 (одна над последней строкой).

@Gaurav: вот полный код - У меня есть на этой странице как SELECT, и UPDATE заявление, 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

Что показывает ваш phpinfo() в случае mysqli? – egis

+0

Кстати, покажите код, в котором вы инициируете объект $ db. Возможно, база данных не выбрана;) – egis

+0

@egis - это весь код: $ db = new mysqli (DBHOST, DBUSER, DBPASS, DATABASE); - о phpinfo(), что я должен искать, у меня есть mysqli, знаю, что на самом деле есть ли что-нибудь еще, что нужно ухаживать? – CodeVirtuoso

ответ

1

SOLVED: Спасибо, что ребята, помогающие мне. После просмотра вокруг я нашел ответ здесь:

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

Nice понимание может быть получено из upvoted отвечает

В принципе, если вы var_dump ($ пример) перед bind_param(), вы узнаете если объект возвращен вообще - в моем случае это не было - bool (false), поэтому я повторно ознакомил с самой буквой SQL-запроса для письма и обнаружил глупую опечатку, которую вы можете увидеть в моем вопросе (столбец с именем $ content вместо контента) - иногда вы просто не можете поймать ошибку невооруженным глазом, поэтому неплохо иметь методологию. Хорошо, я так учу :)

2

Вы должны использовать $update_page->prepare()

См this

Любое последующее вызовы любой функции mysqli_stmt не будут выполняться до вызова mysqli_stmt_prepare().

EDIT: используйте ssssi вместо sssss.

+0

Спасибо Гаураву, я прочитал связанную страницу и попробовал еще несколько вещей, и до сих пор не могу заставить ее работать. Когда я использую команду $ update_page-> (как с запросом здесь, так и без него), я теперь получаю предупреждение: mysqli_stmt :: bind_param() [mysqli-stmt.bind-param]: недопустимый объект или ресурс mysqli_stmt – CodeVirtuoso

+0

Что меня смущает больше всего это то, что синтаксис из моего исходного вопроса работает отлично с запросом SELECT, я думал, что понял. – CodeVirtuoso

+0

Вы можете опубликовать полный код. Может возникнуть проблема с синтаксисом. – Gaurav

Смежные вопросы