感谢您帮助我。
我试图做一些简单的事情:在数据库中只插入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();
然后,我尝试做另一个插页:我有一张桌子'用户'它有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')
知道什么是错的吗?
答案 0 :(得分:1)
您的问题是单引号变量。只需删除单引号或使用双引号,双引号的内容将被部分评估/解析:
$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);
答案 1 :(得分:1)
发现问题:
它在“列日”上失败了,口音有些问题。我确保双方都有相同的编码,最后我可以插入! 我的代码现在看起来像:
$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();