2016-07-29 31 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