谢谢你帮助我。
我正在尝试做一些简单的事情:只在数据库中插入 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/