2013-08-28 69 views
0

我想要的是写这个代码事先准备好的声明:SQL预处理语句得到结果PHP变量

if (mysqli_num_rows(mysqli_query($link,"select name from accounts where name='$username'"))==1) 
     { 
      // some actions 
     } 

好了,那怎么办?

我知道如何做一个准备"INSERT INTO"语句,因为我并不需要得到mysqli_query结果到一个PHP变量,但如何保存"SELECT"准备语句后立即运行mysqli_num_rows($result)

编辑:我想要做的是执行一个mysqli_query()与准备语句,同时将结果保存到一个PHP $结果变量。怎么做?

回答

1

绝不应该EVER这样的连锁数据库操作。您假定查询将始终成功。这是不好的做法。永远不要成功。始终认为这些行动将会失败,并将成功视为令人惊喜的事情。

由于您是菊花链式连接这样的数据库调用,因此您实际上无法捕获mysqli_query()将返回的结果句柄,所以实际上您正在运行查询,然后丢弃其结果。

你应该有更多的东西一样

$result = mysqli_query($link, "....") or die(mysqli_error()); 
if (mysqli_num_rows($result)) == 1) { 
    $row = mysqli_fetch_assoc($result); 
    $anem = $row['name']; 
} 

,除非你已经采取了这种代码未显示的步骤,你很容易受到SQL injection attacks

对于准备语句的东西:

$stmt = mysqli_prepare($link, 'SELECT ... WHERE name=?'); 
mysqli_stmt_bind_param($stmt, 's', $name); 
mysqli_stmt_execute($stmt); 

$rows = mysqli_stmt_num_rows($stmt); 

mysqli_stmt_bind_result($stmt, $fetched_name); 

mysqli_stmt_fetch($stmt); // $fetched_name now contains the name from the DB 
+0

确定,以及如何做准备的语句mysqli_query(),同时保存在$结果? – Liakos

+0

好的。你能解释一下mysqli_stmt_bind_result()和mysqli_stmt_fetch()是做什么的? (最后2行) – Liakos