谢谢你帮我。
我正在尝试做一些简单的事情:只在数据库中插入两个内容。第一种方法效果良好:
$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“($session = $stmt->insert_id;)。
我可以这么做吗?我错过了什么?
谢谢!
编辑:删除单引号和放置双引号,但这似乎没有削减它。尝试将它们用于两个字符串,但不用于会话,但不会更改结果。
EDIT2 2:按照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')你知道怎么回事吗?
发布于 2015-02-17 14:24:32
您的问题是单引号变量。只需删除单引号或使用双引号对双引号的内容进行部分评估/分析:
$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);发布于 2015-02-18 13:49:38
发现了这个问题:
它在“列日”(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();https://stackoverflow.com/questions/28563566
复制相似问题