2013-06-30 39 views
-1

這是正確的,我知道你不應該再使用mysql了。所以我只是把我加到了最後,這是我從互聯網上得到的代碼,而我是mysql的新手,所以我不太確定自己在做什麼。我只是想確保這是正確的用法。這是正確的mysqli

$sql = "SELECT lat, lon from zipcodes_2011 WHERE zipcode='$zip'"; 
    $r = mysqli_query($con, $sql); 
    if (!$r) { 
    $this->last_error = mysqli_error(); 
    return false; 
    } else { 
    $row = mysqli_fetch_array($r); 
    mysqli_free_result($r); 
    return $row;  
    } 
+1

幾乎正確的是它不會失敗,除了'mysqli_error()'調用,但不是_recommended_如果'$ zip'是從用戶輸入派生的。如果是這樣,你應該使用MySQLi準備好的語句,而不是用連接/內插的SQL語句調用'mysqli_query()'。 [開始學習如何做到這一點](http://php.net/manual/en/mysqli.prepare.php),因爲你真的應該一直這樣做。 –

+0

我已經開始學習準備好的陳述了,這是我從互聯網上得到的代碼,但你說得對,那會好很多,我會改變它。 –

回答

2

這是不正確的。

查看mysqli_error的文檔:它指出mysqli $link不是可選的。您必須將數據庫鏈接傳遞給它。

$this->last_error = mysqli_error($con); 

我也強烈建議準備。

$sql = "SELECT `lat`,`lon` FROM `zipcodes_2011` WHERE `zipcode` = ?"; 

$stmt = mysqli_stmt_init($link); 

$error = mysqli_stmt_prepare($stmt, $sql); 
if ($error === false) { 
    $this->last_error = mysqli_error($con); 
    return false; 
} 

$error = mysqli_stmt_bind_param($stmt, "s", $zip); 
if ($error === false) { 
    $this->last_error = mysqli_error($con); 
    return false; 
} 

$error = mysqli_stmt_execute($stmt); 
if ($error === false) { 
    $this->last_error = mysqli_error($con); 
    return false; 
} 

$error = mysqli_stmt_bind_result($stmt, $row); 
if ($error === false) { 
    $this->last_error = mysqli_error($con); 
    return false; 
} 

$error = mysqli_stmt_fetch($stmt); 
if ($error === false) { 
    $this->last_error = mysqli_error($con); 
    return false; 
} 

return $row;