PHP/Mysqli 插入:无法通过引用传递参数 2

PHP/Mysqli insert : Cannot pass parameter 2 by reference

谢谢你帮我。

我正在尝试做一些简单的事情:只在数据库中插入 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();

然后,我尝试进行另一个插入:我有一个 table '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 " 从第一个块开始 ($session = $stmt->insert_id;)

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

谢谢!

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

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

发现问题:

它在 "Liège" 上失败了,口音有问题。我确保两边的编码相同,我终于可以插入了! 我的代码现在看起来像:

$contactinfo = $db->real_escape_string($contactinfo);
$stmt = $db->prepare("INSERT INTO users (fullName, sessionId, contactInfo) VALUES (?,?,?)");
$stmt->bind_param("sis", $username, $session, $contactinfo);
$stmt->execute();
$userId = $stmt->insert_id;
$stmt->close();