Строка определения типа не соответствует номеру привязки

У меня ошибка в php, и я не знаю, как это исправить. Кстати, это пример моего школьного урока, поэтому я не знаю, что там происходит. Предполагается, что это основная / подробная навигация.

<?php

$mysqli = new mysqli("localhost", "root", "", "base");

$stmt = $mysqli->prepare('SELECT * FROM aeromiting WHERE id = ":id"');
echo $mysqli->error;
$stmt->bind_param(':id', $_GET['id']);
var_dump($stmt);

$data = $stmt->execute();

?>

Предупреждение: mysqli_stmt :: bind_param (): Количество элементов в типе
строка определения не соответствует числу переменных связывания в
C: \ xampp \ htdocs \ test1 \ detail.php на объекте строки 20 (mysqli_stmt) # 2 (10)
{[«disabled_rows»] => int (0) [«insert_id»] => int (0) [«num_rows»] =>
int (0) [«param_count»] => int (0) [«field_count»] => int (4) [«errno»] =>
int (0) [«error»] => string (0) «» [«error_list»] => array (0) {}
[«sqlstate»] => string (5) «00000» [«id»] => int (1)}

1

Решение

Если вы хотите сделать это в PDO, попробуйте это …

<?php
$host = 'localhost'; $db = 'base'; $user = 'root'; $pw = '';
$conn = new PDO('mysql:host='.$host.';dbname='.$db.';charset=utf8', $user,     $pw);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
$id = $_GET['id'];
$sql = "SELECT * FROM aeromiting WHERE id=:id";
$query = $conn->prepare($sql);
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
$totalRows = $query->rowCount();
} catch (PDOException $e) {
die("Could not get the data: " . $e->getMessage());
}
?>

Посмотри на PDO_MySQL для дополнительной информации.

1

Другие решения

Вы смешиваете API здесь. MySQLi не может принимать строки или лайки в качестве параметров.

$stmt = $mysqli->prepare('SELECT * FROM aeromiting WHERE id = ":id"');
$stmt->bind_param(':id', $_GET['id']);

Должно быть

$stmt = $mysqli->prepare('SELECT * FROM aeromiting WHERE id = ?');
$stmt->bind_param('i', $_GET['id']);

Это, конечно, предполагается, что $_GET['id'] является целым числом (следовательно, 'i' в bind_param, Если это строка, замените i с s,

Вы, вероятно, должны получить bind_result так что вы фактически связываете результаты из базы данных с некоторыми переменными. Посмотрите на MySQLi документация.

0

По вопросам рекламы [email protected]