什么是获取数组的最佳方法

时间:2016-02-25 22:51:39

标签: mysql php arrays

好吧,所以我相信有一种更好的方法可以从数据库中获取数组,这里是我现在的代码。

$id = 1;
$userquery = mysql_query("SELECT * FROM login WHERE id='$id'");

while($row = mysql_fetch_array($userquery, MYSQL_ASSOC)) {
    $username = $row['username'];
    $password = $row['password'];
    $email = $row['email'];
}

2 个答案:

答案 0 :(得分:1)

所以如果我没有错,你想要一个更好的方法来从一个语句中获取所有来自mysql的返回行,而不是使用while循环。< / p>

如果是这种情况,那么我必须说mysql_驱动程序不提供任何此类功能,这意味着您必须使用foreachwhile手动循环它们。

但是,因为mysql_已经被删除了,你很幸运!你实际上可以切换到更好更新的mysqli_PDO驱动程序,这两个驱动程序实际上都有函数来获取所有返回的行。

mysqli _ mysqli_result::fetch_all

PDO PDOStatement::fetchAll

例如

mysqli_fetch_all($result,MYSQLI_ASSOC); 
// The second argument defines what type of array should be produced 
// by the function. `MYSQLI_ASSOC`,`MYSQLI_NUM`,`MYSQLI_BOTH`.

答案 1 :(得分:0)

就像已经告诉你的评论一样:PHP的mysql驱动程序已被弃用。你应该使用预备语句和参数。

例如在PDO中,您的代码看起来像这样:

//connection string:
$pdo= new PDO('mysql:host=localhost;dbname=my_db', 'my_user', 'my_password');

//don't emulate prepares, we want "real" ones:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

//use exception-mode if you want to use exception-handling:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$id = 1;

//it's always better to strictly use backticks for db-names (db, tables, fields):
$sql = "SELECT * FROM `login` WHERE `id` = :id";

try
{
    //create your prepared statement:
    $stmt = $pdo->prepare($sql);

    //bind a parameter and explicitly use a parameter of the type integer (in this case):
    $stmt->bindParam(":id", $id, PDO::PARAM_INT);

    //execute the query
    $stmt->execute();
}
catch(PDOException $e)
{
    exit("PDO Exception caught: " . $e->getMessage());
}


while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $username = $row['username'];
    $password = $row['password'];
    $email = $row['email'];
}

在这里:您的PHP - MySQL例程现在可以防止SQL注入,不再使用已弃用的PHP - 函数!它是最先进的技术;)