使用mysqli发布到数据库中

时间:2016-02-06 00:32:16

标签: php mysql mysqli

我正在学习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

3 个答案:

答案 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);