2014-01-29 2 views
1

У меня возникают проблемы с функцией bind_param. Я опубликую всю информацию ниже.bind_param() Проблемы

Ошибка:

Fatal error: Call to a member function bind_param() on a non-object in /home4/lunar/public_html/casino/blogpost.php on line 88 

MySQL Error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':user, :title, :message, :image, :category, NOW())' at line 1 

Запрос:

$user = $_COOKIE['user']; 
    $title = $_POST['title']; 
    $message = $_POST['message']; 
    $image = $_POST['image']; 
    $category = $_POST['category']; 
    $stmt = $mysqli->prepare("INSERT INTO `lunar_casino`.`posts` (`id`, `by`, `title`, `message`, `image`, `category`, `date`) VALUES(NULL, :user, :title, :message, :image, :category, NOW())"); 
    echo $mysqli->error; 
    $stmt->bind_param(":user", $user); 
    $stmt->bind_param(":title", $title); 
    $stmt->bind_param(":message", $message); 
    $stmt->bind_param(":image", $image); 
    $stmt->bind_param(":category", $category); 
    $stmt->execute(); 
    if(!$stmt){ 
     echo "<font color='red'><b>There has been an error with our database! Please contact the website administrator!</b></font><br /><br />"; 
     echo $mysqli->error; 
    } else { 
     echo "<font color='green'><b>You have successfully added a blog post!</b></font><br /><br />"; 
    } 

Любые идеи, почему его так?

+3

MySQLi не поддерживает именованные параметры. Если вы хотите использовать ': name', вам нужно использовать PDO. MySQLi поддерживает только '?'. http://www.php.net/manual/en/mysqli-stmt.bind-param.php –

+0

Да, я искал информацию о проблеме в Интернете, и я видел много людей, использующих «?». Итак, как бы преобразовать мою версию PDO в рабочую версию mysqli? Если вы положите это в ответ, и он сработает, я с радостью согласился бы :) – user3023566

ответ

6

Как упоминалось в Rocket Hazmat, вы можете использовать вопросительные знаки только в качестве держателя параметра привязки параметров. Вы должны сделать что-то подобное:

$stmt = $mysqli->prepare("INSERT INTO `lunar_casino`.`posts` (`id`, `by`, `title`, `message`, `image`, `category`, `date`) VALUES(NULL, ?, ?, ?, ?, ?, NOW())"); 
$stmt->bind_param("sssss", $user, $title, $message, $image, $category); 

Подробнее: http://www.php.net/manual/en/mysqli-stmt.bind-param.php

+0

Спасибо, это работает! : D – user3023566

0

$ stmt-> bind_param ("SSSSS", $ пользователь, $ название, $ сообщение, $ изображения, $ категории); по первому аргументу s = string и i = integer. Вам нужно указать, какой тип значения вы хотите добавить в базу данных. Если вы хотите добавить 5 значений, которые являются строками в базе данных, тогда напишите 'sssss', если вы хотите вставить 5 целых чисел, а затем напишите 'iiiii', если у вас есть значения целых чисел и некоторые строковые значения, которые вы можете отрегулировать соответствующим образом.

// так что если ваши значения являются строками, тогда это будет правильно: $ stmt-> bind_param ("sssss", $ user, $ title, $ message, $ image, $ category);

// так что если ваши значения являются целыми числами, это было бы правильно: $ stmt-> bind_param ("iiiii", $ user, $ title, $ message, $ image, $ category);

// если первые 2 являются целыми числами, а остальные 3 строки, то это будет правильно: $ stmt-> bind_param («iisss», $ user, $ title, $ message, $ image, $ category);

и так далее.