类型定义字符串与bind的数量不匹配

时间:2015-09-03 11:53:10

标签: php master-detail

我在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():类型中的元素数   定义字符串与中的绑定变量数不匹配   第20行对象上的C:\ xampp \ htdocs \ test1 \ detail.php(mysqli_stmt)#2(10)   {[“affected_rows”] =&gt; int(0)[“insert_id”] =&gt; int(0)[“num_rows”] =&gt;   int(0)[“param_count”] =&gt; int(0)[“field_count”] =&gt; int(4)[“errno”] =&gt;   int(0)[“error”] =&gt; string(0)“”[“error_list”] =&gt;数组(0){}   [ “SQLSTATE”] =&GT; string(5)“00000”[“id”] =&gt; int(1)}

2 个答案:

答案 0 :(得分: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 :(得分:0)

你在这里混合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 documentation