好吧,所以我相信有一种更好的方法可以从数据库中获取数组,这里是我现在的代码。
$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'];
}
答案 0 :(得分:1)
所以如果我没有错,你想要一个更好的方法来从一个语句中获取所有来自mysql的返回行,而不是使用while循环。< / p>
如果是这种情况,那么我必须说mysql_
驱动程序不提供任何此类功能,这意味着您必须使用foreach
或while
手动循环它们。
但是,因为mysql_
已经被删除了,你很幸运!你实际上可以切换到更好更新的mysqli_
或PDO
驱动程序,这两个驱动程序实际上都有函数来获取所有返回的行。
mysqli _ :mysqli_result::fetch_all
例如
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
- 函数!它是最先进的技术;)