PDO在函数中准备了语​​句

时间:2013-12-30 13:47:51

标签: php mysql

我目前正在使用MySQL和PHP,但我希望启动MySQLi或PDO

我有while循环,如:

$sql="select from ... ";
$rs=mysql_query($sql);
while($result=mysql_fetch_array($rs))
{
    $sql2="select from table2 where id = $result["tbl1_id"] ";
}

如果我将MySQLi或PDO查询放入函数中,我该如何运行上述内容?在while循环中使用查询执行while循环吗?

或者是否更容易不执行这些功能并且只是正常运行预准备语句?

4 个答案:

答案 0 :(得分:0)

这是一个像oGeez这样的重复问题,在问问题之前,你必须学习如何在PHP和其他代码中编写PDO代码, 这就是答案:

$dbh = new PDO("mysql:host=" . HOST . ";dbname=" . BASE, USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query = 'SELECT * FROM table';
    $stmt = $dbh->query($query);
    $items = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach($items as $item {
 print_r($item);
}

答案 1 :(得分:0)

你不会。说实话。即使在过去,你也不会这样做,但是这样:

$sql="select from ... ";
$rs=mysql_query($sql);
$ids = array()
while($result=mysql_fetch_array($rs))
  {
  $ids[] = $result["tbl1_id"];
  }

$sql2="select from table2 where id in ".implode(',', $ids) .";

或者更好的是,您只需要在需要提供信息的所有表上运行查询一次。

在PDO中你可以做同样的事情。获取所有ID并执行查询

答案 2 :(得分:0)

我通常采用准备查询而不使用函数的方法。此外,我不清楚你想要的是什么。您希望尽可能快速有效地进行查询,这样您就不应该在另一个循环中运行一段时间。

这就是我的PDO查询通常看起来的方式

我的联系:

$host = "localhost";
$db_name = "assignment";
$username = "root";
$password = "";

try {
    $connection = new PDO("mysql:host={$host};dbname={$db_name}", $username, $password);

}catch(PDOException $exception){ //to handle connection error
    echo "Connection error: " . $exception->getMessage();
}

我的查询:

$query = "SELECT * FROM Table";
               $stmt = $connection->prepare( $query );
               $stmt->execute();

             while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
                   {
                     extract($row);


                     }

答案 3 :(得分:0)

将它放在函数中的主要原因是如果您在多个文件中使用查询。我有一个包含许多查询的Web应用程序,我喜欢将它们保存在一个单独的文件中,以便在需要进行更改时更容易跟踪。主要的是你1)必须将数据库作为参数传递,2)返回结果

function pdoquery($ db,$ parameter){     $ query =“SELECT * FROM table WHERE column =?”;     $ stmt = $ db-> prepare($ query);     $ stmt-> bindValue(1,$ parameter,PDO :: PARAM_STR); //或PARAM_INT     if(!$ stmt-> execute()){         echo“无法获得结果:(”。$ stmt-> errorCode。“)”。 $ stmt-> errorInfo中;         出口;     }     其他         $ result = $ stmt-> fetch();     $ db = null;     返回$ result; }

但正如其他人所提到的,如果它只使用一次,则不需要函数,并且循环结果最好在函数外部完成。但是,如果你愿意,可以在函数内部进行。