Проблема с подготовленным оператором UPDATE в PHP - PullRequest
5 голосов
/ 07 февраля 2011

У меня проблема с подготовленным оператором UPDATE, я посмотрел везде, просмотрел вопросы здесь, и синтаксис кажется правильным, что я пропустил?

$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();

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

Неустранимая ошибка: вызов функции-члена bind_param () для необъекта

относится к строке 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);

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

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

См. это

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

РЕДАКТИРОВАТЬ: используйте ssssi вместо sssss.

1 голос
/ 08 февраля 2011

решено: Большое спасибо ребятам, которые мне помогли. После просмотра я нашел ответ здесь:

Почему я получаю эту ошибку вызова функции для необъекта, когда я вызываю функцию для объекта?

Хорошую проницательность можно получить из ответов, проголосовавших за отказ

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...