任何人都可以指出这段代码中的错误吗?准备好的声明

时间:2014-02-23 20:54:12

标签: mysql prepared-statement

对于你们这些人来说,这可能是件小事,但对我来说这是一个挑战。 我正在考虑安全性,因为我是PHP和Mysql的新手,我永远无法100%确定我的工作。那么这段代码中的任何一个错误都可以吗?

$sql = 'SELECT caracteristique_id, caracteristique, obligatoire FROM caracteristique WHERE categorie = ?';


if(mysqli_prepare($con, $sql)){
    $stmt = mysqli_prepare($con, $sql);
    mysqli_stmt_bind_param($stmt, 's', $cat);
    mysqli_stmt_execute($stmt);
    $row = array();
    mysqli_stmt_bind_result($stmt, $row['caracteristique_id'], $row['caracteristique'], $row['obligatoire']);

while(mysqli_stmt_fetch($stmt)){
// do stuff here
}
}

任何帮助都将会受到赞赏。 注:我在网上做了很多研究,我只是不确定100%。

1 个答案:

答案 0 :(得分:0)

您可以(优化/重写)代码段(它将更加ORMised):

$sql = 'SELECT caracteristique_id, caracteristique, obligatoire FROM caracteristique WHERE categorie = ?';
$stmt = mysqli_prepare($con, $sql);
if( $stmt ) {
    $stmt->bind_param('s', $cat);
    $stmt->execute();
    $row = array();
    $stmt->bind_result( $row['caracteristique_id'], $row['caracteristique'], $row['obligatoire']);
    while( $stmt->fetch() ) {
        // do stuff here
    }
}

除此之外,我认为该细分市场根本没有任何问题。它应该工作正常。


对于错误等,将上述段放在try-catch块中:

try { 
    /* The segment from above */
} catch (mysqli_sql_exception $e) { 
    echo $e->errorMessage(); 
}