无法在表中存储数据

时间:2016-01-16 08:20:50

标签: php

无法在表格中插入数据我正在使用mysql数据库

$conn = new mysqli("localhost","username","password", "dbname");

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$stmt = $conn->prepare("INSERT INTO mail_sent(mid, miid,status) VALUES (:mid, :miid,:status)");
$stmt->bind_param('dds',$mail_id, $inv_id, $mailStatus);//line 37
$stmt->bindParam(':mid', $mail_id);
$stmt->bindParam(':miid', $inv_id);
$stmt->bindParam(':status', $mailStatus);
$stmt->execute();
  

致命错误:在第37行的C:\ wamp \ www \ mail \ toinvite.php中的非对象上调用成员函数bind_param()

2 个答案:

答案 0 :(得分:1)

您的问题是您将PDO与MySQLi混淆。只有PDO的语法为:mid,MySQL / MySQLi无法理解这一点。对于MySQLi中的预处理语句,您必须使用?作为占位符。

if ($stmt = $conn->prepare("INSERT INTO mail_sent (mid, miid, status) VALUES (?, ?, ?)")) {
    $stmt->bind_param('iis', $mail_id, $inv_id, $mailStatus);
    $stmt->execute();
}

正如您所看到的,MySQLi在一行中处理所有绑定,与PDO略有不同。此外,您的数据库的ID为整数,因此我也将它们分配为bind_param中的整数(您之前使用的是双打)。

  • i对应变量的类型为整数
  • d对应变量的类型为double
  • s对应的变量具有类型字符串
  • b对应的变量是一个blob,将以数据包的形式发送

参考:

答案 1 :(得分:0)

尝试在准备声明后立即执行。

var_dump($stmt);

我确信准备声明失败了(即返回FLASE)。如果失败了,你就不能打电话给bind_param()。 您在DB或表名

中的列名可能不匹配

并且你确定mid, miid是双倍而不是整数,因为你使用'd'来绑定params。