2016-07-29 70 views
2

经过很长时间避免准备好的语句我想离开我的舒适区并将所有网站更新到mysqli,但我很难实现以前看起来很简单的事情。 ..SELECT * FROM和mysqli_fetch_array使用已准备好的语句

连接

$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之前清理所有itens,我的声明仍然不安全?

任何人都可以告诉我如何使用预处理语句,但仍然能够单独打印我的结果,例如:$ row ['name],$ row ['address'],$ row ['city' ] ...

只是为了更新了一些东西

此代码工作正常,我的连接是正常和$ ID声明我上面的查询(我已经编辑我的问题)。我的问题是我怎么能“改造”这个代码到预处理语句一个mysqli的,仍然可以打印结果分别如$行[“名称”],$行[“地址”] ...

+0

你会得到什么错误?你能连接到数据库吗? – Anshum

+0

@Anshum我没有收到任何错误,这段代码完美地工作,我更新了我的问题与缺少的信息(数据库和ID声明)。我的问题是如何将此代码转换为mysqli预准备语句,并且仍然能够单独打印结果。 – suicidebilly

回答

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(); 
} 

?> 

它可以帮助

+0

我已更新我的问题,代码工作正常。我的问题是如何将此语句转换为mysqli预准备语句,以防止注入并加快查询执行速度。 – suicidebilly