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