我正在学习php并尝试进行以下工作:
<?php
require_once("db_connect.php");
// TODO - Check that connection was successful.
$dname = $_POST["dname"];
$daddress = $_POST["daddress"];
$stmt = $mysqli->prepare("INSERT INTO test (dname, daddress) VALUES (?, ?)");
// TODO check that $stmt creation succeeded
// "s" means the database expects a string
$stmt->bind_param("s", $dname, $daddress);
$stmt->execute();
$stmt->close();
$mysqli->close();
?>
它只使用一个bind_param而不是2.如果从代码中删除了$ daddress,那么它就会发布。该表格有26个帖子进入数据库我正在做2个目前,以保持最小化。
提交表单时出现以下错误。
警告:mysqli_stmt :: bind_param()[mysqli-stmt.bind-param]:类型定义字符串中的元素数与/ home / mymotorsportco / public_html / entry / actions / entry中的绑定变量数不匹配。第15行的PHP
答案 0 :(得分:4)
根据PHP manual:
类型
包含一个或多个字符的字符串,用于指定相应绑定变量的类型
i - 对应变量的类型为整数
d - 对应变量的类型为double
s - 对应的变量具有类型字符串
b - 相应的变量是一个blob,将以数据包的形式发送
您必须为要绑定的所有参数添加类型。因此,如果第二个参数是字符串,则必须执行
$stmt->bind_param("ss", $dname, $daddress);
答案 1 :(得分:3)
您需要将相同数量的字符传入第一个参数,因为您有要注入查询的值。例如:
$stmt->bind_param("ss", $dname, $daddress);
会说第一个参数是一个字符串,第二个是。另外,以下内容将告诉数据库期望一个字符串,然后是int:
$stmt->bind_param("si", $dname, $daddress);
使用预准备语句的大道具,大多数新手都会投入绝对没有卫生设施的变量。你走在正确的轨道上了!
答案 2 :(得分:2)
你有2个字符串而不是1。
$stmt->bind_param("ss", $dname, $daddress);