php - bindParam() 中的 Mysqli 准备语句不起作用

标签 php mysqli prepared-statement

就像往常一样,我正在寻找 PHP 的最佳实践,准备好的语句似乎是我现在应该闭着眼睛做的事情。所以我开始研究我发现的一些例子。

运行脚本时出现此错误:

Fatal error: Call to a member function bindParam() on a non-object in /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php on line 10

这是代码。

插入 Simple Method.php

<?php
require_once '../config.php';

$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");

$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;

$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);

$stmt->execute();

$stmt->close();

$db->close();
?>

config.php

<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>

不确定我在这里做错了什么,这是在 php.net 上找到的类似示例,为什么不起作用? PS:我认为 mysqli 连接不是问题,因为我用它来执行一些带有 SELECT SQL 命令的准备好的语句。并且工作得很好。


编辑

决议和原因。

example 中,我应该为查询中的每个值使用 bind_param()。但感谢 Bart,他设法用我的代码解决了这个问题。

它在哪里:

$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);

应该是:

$stmt->bind_param("sii", $nome, $telefone, $bi);

现在对于那些可能想知道“sii”是什么的人来说。

好的 bind_param 就我所见,它将“$var”绑定(bind)到每个问号“?”按顺序。

所以用一个bind_param()我可以同时绑定(bind)它们,正常使用bind_param()需要指定被绑定(bind)的数据类型.

我要绑定(bind)的第一个值是 $nome 一个字符串,由“s”指定;

而其他的 $telefone$bi 是整数,因为他有“i”;

对于在这里有类似问题的其他人来说,它是其他数据类型(来自 php.net)。

i = Integer;

s = String;

d = Double;

b = Blob;

如果有人有更好的解释请发表或评论。所以我可以改进自己。

谢谢。

最佳答案

您可能认为连接没有问题,但您应该检查以确保:

$db = new mysqli($server_host, $server_user, $server_password, $server_db);
if (mysqli_connect_errno()) {
    printf("DB error: %s", mysqli_connect_error());
    exit();
}

编辑:

当你这样做时会发生什么:

$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$stmt->bind_param("sii", $nome, $telefone, $bi);
$stmt->execute();

?

表格 coisas 拼写正确吗?

关于php - bindParam() 中的 Mysqli 准备语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1676750/

相关文章:

php - PDO 与 MYSQLI、准备语句和绑定(bind)参数

PHP DOMDocument saveHTML 没有正确编码西里尔字母

php - Zend Framework 2 上的模块和模型组织

php - 如何在 laravel 查询构建器或 Eloquent 两个表中按 created_at 列计算行数?

php - mysqli bind_param 更新查询不起作用

php - 我什么时候必须关闭 mysqli(数据库)连接?

php - 如何在 PHP PDO for MySQL 中使用 VARBINARY 准备语句?

javascript - 如何以 Laravel 形式开发 javascript 事件句柄

php - Mysql一次获取列值

php - 有效地删除多个表中的数据mySQLi Prepared Statement