MySQL подготовил заявления, проблемы с пониманием, как это работает - PullRequest
1 голос
/ 18 декабря 2010

Я пытаюсь использовать подготовленные операторы, но у меня возникают проблемы с его успешным выполнением.Вот мой код:

 function addAlbum($album){
        $connection = mysqli_connect(HOST,USER,PASS,DATABASE);
        /*$sql = 'INSERT INTO `'.TABLE_ALBUMS.'` (albumName) VALUES ("'.$album.'")';
        $result = mysqli_query($connection,$sql);*/
        $stmt = $dbh->prepare('INSERT INTO `'.TABLE_ALBUMS.'` (albumName) VALUES ("'.$album.'")');
        $stmt->bindParam(':albumName', $album);
        $result = $stmt->execute();

        if($result){
            header("Location: index.php?success");
        } else {
            header("Location: index.php?fail");
        }

    }

Я запустил это в Firefox с ошибками, и вот что я получаю:

Неустранимая ошибка: вызов неопределенного метода mysqli_stmt :: bindParam() в /Applications/MAMP/htdocs/PHPproject/includes/functions.inc.php в строке 16

Может кто-нибудь сказать мне, где я иду не так?

многоспасибо

1 Ответ

4 голосов
/ 18 декабря 2010

Первым аргументом для привязки должен быть тип переменной:

$stmt->bind_param("s", $album);

Также вы должны проверить возвращаемое значение execute(), а не $stmt:

$result = $stmt->execute();
if($result){
  echo "yes";
}
else {
  echo "no";
}

Также я бы сказал, что не стоит готовить утверждение каждый раз, когда вы что-то вставляете. Подготовленные операторы должны быть переменными класса или, если у вас нет глобальных переменных, то вы не должны готовить оператор каждый раз, когда вызываете функцию. Просто напишите функцию init(), которая подготовит все операторы, которые вы будете использовать.

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