PHP/Mysqli 插入 : Cannot pass parameter 2 by reference

标签 php mysql post mysqli

谢谢你帮助我。

我正在尝试做一些简单的事情:只在数据库中插入 2 个。 第一个效果很好:

$stmt = $db->prepare("INSERT INTO sessions(date, lieu, trainer) VALUES (?,?,?)");
$stmt->bind_param("sss", $date, $location, $trainer);
$stmt->execute();
$session = $stmt->insert_id;
$stmt->close();

然后,我尝试进行另一个插入:我有一个表“users”,它有 4 列:一个 Id,自动递增,一个用户名(名为“fullName”的列),一个 sessionId(一个 int)和一个 contactInfo (一个 varchar)。

这是我的第二个插入代码:

//var_dump($session); returns an int
$stmt = $db->prepare("INSERT INTO users(fullName, sessionId, contactInfo) VALUES (?,?,?)");
$stmt->bind_param("sis", "$username", "$session", "$contactinfo");
$stmt->execute();
$newId = $stmt->insert_id;
$stmt->close();

从我从其他帖子中读到的内容来看,当您尝试传递一个不是参数的参数(例如:一个 int)时,似乎会出现这个问题,但在我的例子中它是一个变量,我重用了“$session”第一个 block ($session = $stmt->insert_id;)

我可以这样做吗?我错过了什么?

谢谢!

编辑:删除单引号并放入双引号,但这似乎并没有削减它。尝试将它们用于两个字符串而不是 session ,但它不会改变结果。

EDIT2:根据 serjoscha 的好建议,我打印了查询以了解它的外观:

echo "INSERT INTO users (fullName, sessionId, contactInfo) VALUES ($username,$session,$contactinfo)";

这给了我类似的东西

INSERT INTO users (fullName, sessionId, contactInfo) VALUES (Paul Honour,56,Location Liège Belgium Email ph@ph.be +329999999)

查询只有在我这样写时才有效:

INSERT INTO users (fullName, sessionId, contactInfo) VALUES ('Paul Honour',56,'Location Liège Belgium Email ph@ph.be +329999999')

知道哪里出了问题吗?

最佳答案

您的问题是单引号变量。只需删除单引号或使用双引号,因为双引号的内容是部分评估/解析的:

$a=3;
echo '$a'; // prints: $a
echo "$a"; // prints: 3
echo $a; // prints: 3 and this is just what you need

您不需要变量的引号,所以只需删除它们:

$stmt->bind_param("sis", $username, $session, $contactinfo);

关于PHP/Mysqli 插入 : Cannot pass parameter 2 by reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563566/

相关文章:

php - 如何并排排列图像

mysql - 从数据表中排除和包含记录

php - 在数据库更新时重定向用户

php - Cakephp验证文件上传 "multiple"

PHP 内存限制在正常的 PHP 脚本中不生效

mysql - 为什么 COUNT 匹配两个 JOIN 值,但只指定了一个特定值

json - 如何使用 VBS 发布漂亮的 JSON

http - 如何在 iOS 应用中完成 HTTP post

javascript - 如何将同一个帖子发送到多个服务器并将数据与单个帖子关联

php - 在 PHP 中任意调整图像大小