好的,这就是问题所在。我试图在我的预定义查询中插入一个变量。但它不起作用。如果我只给它一个值,查询就有效,但当我在其中插入变量时,它会失败。帮助
$connection = new mysqli('localhost', 'user', 'pass', 'db');
$username = "test";
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if ($result = $connection->query("INSERT INTO users (username, password, email, firstName, lastName, createDate) VALUES ('".$username."', 'test', 'test', 'test', 'test', 'test')")){
echo "success";
$result->close();
}
else {
echo "error";
}
$connection->close();
?>
如果我用任何值替换$ username,它都有效..我在这里遗漏了什么吗?
答案 0 :(得分:6)
您好,这适用于可能仍需要完成原始问题中提出的问题的任何人。
某人可能不想使用准备好的陈述的原因 - 来自: http://www.php.net/manual/en/mysqli.quickstart.statements.php
"使用预准备语句并不总是最有效的方式 执行一份声明。准备好的语句只执行一次导致 比未准备好的声明更多的客户端 - 服务器往返。"
//you will want to clean variables properly before inserting into db
$username = "MyName";
$password = "hashedPasswordc5Uj$3s";
$q = "INSERT INTO `users`(`username`, `password`) VALUES ('".$username."', '".$password."')";
if (!$dbc->query($q)) {
echo "INSERT failed: (" . $dbc->errno . ") " . $dbc->error;
}
echo "Newest user id = ",$dbc->insert_id;
干杯!
答案 1 :(得分:3)
由于以上是一些讨论,我认为id在pdo和mysqli中提供以下示例进行比较:
<强>库MySQLi 强>:
$connection = new mysqli('localhost', 'user', 'pass', 'db');
$username = "test";
if ($connection->errno) {
printf("Connect failed: %s\n", $connection->error);
exit();
}
$username = 'test';
$stmt = $connection->prepare("INSERT INTO users (username, password, email, firstName, lastName, createDate) VALUES (?,'test', 'test', 'test', 'test', 'test')");
$stmt->bind_param('s', $username_value);
$username_value = $username; // not we could simply define $username_value = 'test' here
if ($result = $stmt->execute()){
echo "success";
$stmt->free_result();
}
else {
echo "error";
}
$connection->close();
<强> PDO 强>:
try {
$db = new PDO($dsn, $user, $pass);
$username = 'test';
$stmt = $db->prepare("INSERT INTO users (username, password, email, firstName, lastName, createDate) VALUES (?,'test', 'test', 'test', 'test', 'test')");
$stmt->execute(array($username));
echo 'Success';
}
catch(PDOException $e)
{
echo $e->getMessage();
}
答案 2 :(得分:0)
在这种情况下,查看问题的上下文最好为username变量分配一些数据,例如
$username=$_POST['username'];
这可能会有所帮助......否则请避免使用双引号,只需放下$username
答案 3 :(得分:-1)
已经很长时间了,可能你已经找到了答案,但为了以防万一,事实证明它实际上是一个简单的问题,你在VALUES的mysqli查询语句中放置双引号和点(& #39;&#34;。$ username&#34;&#39;),但如果您只是将其留在单引号中,只需在引号内写下变量名称,例如,VALUES(&#39; $ username&#39; ),它会工作。我认为它适用于新版本的PHP虽然不确定即 改变
"INSERT INTO users (username, password, email, firstName, lastName, createDate) VALUES ('".$username."', 'test', 'test', 'test', 'test', 'test')"
到
"INSERT INTO users (username, password, email, firstName, lastName, createDate) VALUES ('$username', 'test', 'test', 'test', 'test', 'test')"
请注意,在VALUE字段中,我的变量未用双引号括起来或以句点连接,即VALUES(&#39; $ username&#39;),因为它会将句点保存为值。
这适用于我,但我注意到再次使用相同的值运行查询时出现问题,它会带来错误,但可以通过在数据库表中添加一列来自动增量ID来避免确保每次运行查询时都会更改值
希望这有帮助
答案 4 :(得分:-2)
最好的答案是我们必须将我们想要的变量分配到另一个变量中。例如:
$username = $_POST['username'];
$a = $username;
mysqli_query("INSERT INTO tablename (username,test, test, test) VALUES ('$a', 'test', 'test');