我目前正在使用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循环吗?
或者是否更容易不执行这些功能并且只是正常运行预准备语句?
答案 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; }
但正如其他人所提到的,如果它只使用一次,则不需要函数,并且循环结果最好在函数外部完成。但是,如果你愿意,可以在函数内部进行。