这个SQL语句有什么作用?

时间:2013-05-02 09:23:59

标签: php sql

我试图理解这个SQL语句:

$id = 5;

$stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id');

    $stmt->execute(array('id' => $id));

    while($row = $stmt->fetch()) {
        print_r($row);
    }

有人可以一步一步地向我解释这里到底发生了什么?

据我所知:

$stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id');

1) $ stmt即将作为iinput进行SQL查询。 SQL查询是从表中选择其id等于5的所有行。

$stmt->execute(array('id' => $id));

2) 我们执行声明。现在$ stmt有这些行吗?

$row = $stmt->fetch()

3) 这对我来说是最令人困惑的一句话。这到底发生了什么?变量“row”逐个获取id = 5的行?这是fetch()的作用吗?如果是的话,它会如何以实际的方式返回结果?它的所有正确答案的数组? EG所有id = 5的行?我不明白这个while循环是如何工作的。第一次运行“row”会有第一行吗?它第二次运行,第二行是否满足我们的creteria(id = 5)等等?是不是每次运行fetch都会返回一个结果?下次我运行fetch,下一个结果,直到没有更多的结果来满足查询?

我觉得我很接近这个。任何可以帮助我完全理解它的东西都将受到高度赞赏!

2 个答案:

答案 0 :(得分:4)

我会解释为评论:

$id = 5;

// Create a prepared statement - don't actually execute the statement yet. 
// The :id value in the statement will be replaced by a parameter value (safely) when the
// statement is executed
$stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id');

// Execute the statement against the DB - the $stmt var now contains the result set for the
// executed statement. e.g. it contains *all* the results that the query fetched
$stmt->execute(array('id' => $id));

// Now we loop through the rows in the result set (they are all in memory at this point). 
// "fetch" will start from row 1 and return the next result each time you call it again. 
// when there are no more rows it returns FALSE and therefore breaks out of the while loop
while($row = $stmt->fetch()) {
    print_r($row);
}

只是检查文档,虽然这是以前的工作方式(自从我触及PHP以来已经好几年),看起来stmt->fetch()实际上将结果放入绑定变量:

http://php.net/manual/en/mysqli-stmt.fetch.php

$row = array();
stmt_bind_assoc($stmt, $row);

// loop through all result rows
while ($stmt->fetch()) 
{
    print_r($row);
}

您最初发布的代码是否真的有效?它似乎没有绑定任何变量,因此$stmt-fetch()调用返回bool TRUE / FALSE,似乎$row不会设置为除TRUE / FALSE

之外的任何值

答案 1 :(得分:2)

这里它使用PDO执行,

使用预准备语句重复SELECT,通过该语句可以调用重复查询

$stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id');

它定义了:id占位符

的预准备语句

$stmt->execute(array('id' => $id));

这个地方将值赋给占位符并执行查询

$row = $stmt->fetch()

从select

中获取记录

有关更多参考,请访问该链接 http://www.php.net/manual/en/pdo.prepared-statements.php