2013-08-05 2 views
-2

Есть ли что-то не так с моим кодом? Я получил фатальную ошибку для предложения bind_param. В нем говорится: «Вызовите функцию-член bind_param() для не-объекта в C: \ xampp \ htdocs \ 1102824H \ Assignment2 \ copyspeech.php в строке 35". Пожалуйста помоги. Благодарю.Ошибка связи bind_param

<?php 

    session_start(); 

    // default user's name 
    $user = ''; 

    // if visitor is logged in 
    $loggedIn = (!empty($_SESSION['user'])); 

    // since user is logged in, let us retrieve user's name from $_SESSION 
    if ($loggedIn) { 
     $user = $_SESSION['user']; 
    } else { 
     // we only allow logged in user to see this page 
     // if visitor not logged in, redirect visitor to login page 
     header('Location: index.php'); 
     exit; 
    } 

    $speechID = $_GET['id']; 

    // the file that contains your database credentials like username and password 
    require_once('config/database.php'); 

    // see Lecture Webp_Week13_14_Using_PHPandMySQL(updating).pptx Slide 4 aka Step 1 
    $mysqli = new mysqli($database_hostname, $database_username, $database_password, $database_name) or exit("Error connecting to database"); 

    // Slide 5 aka Step 2 
    $stmt = $mysqli->prepare("INSERT INTO assignment_speeches (id, subject, body, tags, image) 
           SELECT id, subject, body, tags, image 
           FROM assignment_speeches 
           WHERE id = ?"); 

    // Slide 6 aka Step 3 the bind params must correspond to the ? 
    $stmt->bind_param("i", $speechID); // 1 ? so we use i. we use i because id is INT 

    // Slide 7 aka Step 4 
    $successfullyCopied = $stmt->execute(); 

    // Slide 8 aka Step 5 
    // we won't check the delete result here. 

    // Slide 9 aka Step 6 and 7 
    $stmt->close(); 

    $mysqli->close(); 

    // if we successfully delete this, we 
    if ($successfullyCopied) { 
     $_SESSION['message'] = 'Successfully copied'; 
    } else { 
     $_SESSION['message'] = 'Unable to copy'; 
    } 

    header('Location: homepage.php'); 

?>

+1

Ваша подготовка не сработала, проверьте '$ mysqli-> error' – DevZer0

+0

Дубликат ** Связанный ** раздел – Gordon

+0

Этот вопрос не соответствует теме, потому что OP не потрудился проверить связанные вопросы и десятки дубликатов мы уже имеем об этой же ошибке. – Gordon

ответ

1

Синтаксис запроса неверен. Вот почему prepare() и последующий вызов bind_param() сбой. Удалить скобки в SELECT пункте вашего запроса

Изменения

SELECT (id, subject, body, tags, image) 

в

SELECT id, subject, body, tags, image 

UPDATE Поскольку id является auto_increment столбцом также необходимо исключить его из столбцов перечените позволить MySQL генерировать новый идентификатор для строки, скопированной

INSERT INTO assignment_speeches (subject, body, tags, image) 
SELECT subject, body, tags, image 
    FROM assignment_speeches 
WHERE id = ? 
+0

Привет, спасибо за ваш ответ. Однако в таблице не было записано никакой информации (assign_speeches_copy). Могу я узнать, что пошло не так? – user2646948

+0

@ user2646948 Единственная причина в том, что ваш 'SELECT' ничего не возвращает. Чтобы помочь вам в дальнейшем, вам нужно показать другие соответствующие части кода (например, как вы выполняете свой запрос) и ваши данные. Вы пытались выполнить ваш выбор непосредственно в mysql-клиенте? – peterm

+0

Я отредактировал сообщение. Надеюсь, поможет. Я новичок в php и mysql. Нужна помощь. Спасибо. – user2646948

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