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

时间:2015-02-17 14:23:01

标签: php mysql post mysqli

感谢您帮助我。

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

知道什么是错的吗?

2 个答案:

答案 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();