SELECT * FROM和mysqli_fetch_array使用Prepared Statements

时间:2016-07-29 05:14:00

标签: php mysqli prepared-statement

经过很长一段时间避免准备陈述我想离开我的舒适区并将我的所有网站更新为mysqli,但我很难在以前看到简单的事情......

连接

$conn = mysqli_connect($host, $user, $password, $database)or die(mysqli_error($conn));

我所有的查询都是以这种方式构建的:

$id = 1;
$result = mysqli_query($conn, "SELECT * FROM users WHERE id = '$id'");
$row = mysqli_fetch_array($result);

然后我可以打印所有需要的字段:

Name: $row['name'];
Email: $row['email'];
Address: $row['address'];
City: $row['city'];
...

我已经尝试了几种方式prepareexecutebindfetch以简单的方式结果,或类似于我习惯的方式,但它们都不适合我。

我的说法很糟糕?我的意思是,如果我在QueryInsert任何{{1}}陈述之前对所有这些消息进行消毒仍然不安全?

任何人都可以向我展示一个示例,说明如何使用预准备语句但仍然可以单独打印我的结果,例如:$ row [' name],$ row ['地址'] ,$ row [' city'] ...

只是更新一些事情

此代码正常运行,我的连接正常,$ id在我的查询上方声明(我编辑了我的问题)。我的问题是我怎样才能改变"将此代码转换为 mySQLi准备好的声明,并且仍然可以单独打印结果,例如$ row [' name'],$ row ['地址'] ..

1 个答案:

答案 0 :(得分:0)

<?php
$mysqli = new mysqli("localhost", "username", "password", "db_name");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$id =1;
if ($stmt = $mysqli->prepare("SELECT name, email from users where id=?")) {

  /* bind parameters for markers */
  $stmt->bind_param("d", $id);

  /* execute query */
  $stmt->execute();

  $stmt->bind_result($name, $email);

  /* fetch value */
  $stmt->fetch();

  printf("%s has email %s", $name, $email);
  /* close statement */
  $stmt->close();
}

?>

愿它有所帮助