php mysqli插入变量查询

时间:2011-03-25 00:01:32

标签: php insert mysqli

好的,这就是问题所在。我试图在我的预定义查询中插入一个变量。但它不起作用。如果我只给它一个值,查询就有效,但当我在其中插入变量时,它会失败。帮助

$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,它都有效..我在这里遗漏了什么吗?

5 个答案:

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