2016-07-24 2 views
1

Я делаю подготовленный оператор в PHP, и мой код в порядке, пока я не добавлю «id» и «key» к моим параметрам. Они определенно находятся в таблице, которую я тоже запрашиваю. Что не так? Заранее спасибо!PHP подготовленный оператор не работает

ERROR: Call to a member function bind_param() on boolean

if($_POST['userx']){ 
echo '<div id="div2"><div id="font2">Dashboard</div>'; 
$queryA = "SELECT name,profo,password,id,key FROM collegestudents WHERE email = ?"; 
    $stmt = $connection->prepare($queryA); 
      $stmt->bind_param('s',$_POST['userx']); 
    $stmt->bind_result($name1,$profo,$password1,$key,$id); 
    $stmt->execute(); 
    $stmt->fetch(); 
    $stmt->close(); 
+4

Возможный дубликат [Вызов к функции члена связывания \ _param() на логическое значение] (http://stackoverflow.com/questions/36982317/call-to-a-member-function-bind-param- on-boolean) – Devon

+0

Можете ли вы предоставить подробную информацию о таблице базы данных? – dimlucas

+0

Как какая информация? –

ответ

2

Ключ - это зарезервированное ключевое слово в mysql.

Это хорошая привычка вставлять имена полей и имена таблиц в обратные ссылки в запросах, а также проверять наличие ошибок.

$queryA = "SELECT `name`,`profo`,`password`,`id`,`key` FROM `collegestudents` WHERE `email` = ?"; 
$stmt = $connection->prepare($queryA); 
if ($stmt) { 
    $stmt->bind_param('s',$_POST['userx']); 
    ... 
} 
else { 
    echo "MySQL ERROR: " . $connection->error; 
} 
0
$stmt = $connection->prepare($queryA); 

возвращает boolean(false)

убедитесь, что ваш запрос является правильным

вы можете сделать простую проверку как этот

$stmt = $connection->prepare($queryA); 
if (!$stmt) { 
echo "failed to run"; 
} else { 
$stmt->bind_param('s',$_POST['userx']); 
$stmt->bind_result($name1,$profo,$password1,$key,$id); 
$stmt->execute(); 
$stmt->fetch(); 
} 

Edit: , если вы используете PDO вы делаете это неправильно, это должно быть, как это изменение файла подключения

$stmt = $conn->prepare("SELECT name,profo,password,id,key FROM 
collegestudents WHERE email = :email"); 
    $stmt->bindParam(':email', $email); 
+0

Я понимаю это, но я спрашиваю, почему запрос не работает? –

+0

@garethpower обновлен –

+0

Хорошо, но для части «ключ» я могу выполнить mysqli escape string ?? –

-1

базы данных с

<?php $con = new PDO('mysql:host=127.0.0.1;dbname=yourdatabasename;','username',''); ?>

Затем измените ниже линии

$queryA = "SELECT name,profo,password,id,key FROM collegestudents WHERE email = ?"; 
$stmt = $connection->prepare($queryA); 
$stmt->bind_param('s',$_POST['userx']); 
$stmt->bind_result($name1,$profo,$password1,$key,$id); 
$stmt->execute(); 

с

$queryA = "SELECT name,profo,password,id,key FROM collegestudents WHERE email = :v"; 
$stmt = $connection->prepare($queryA); 
$stmt->execute(array('v' => $_POST['userx'])); 
+0

Не так, как mysqli готовить работы. Первым аргументом является тип данных, 's' обозначает строку. Код – Devon

+0

использует 'PDO', а не' mysqli'. –

+0

Где вы это видите? Вопрос помечен 'mysqli'. – Devon