【问题标题】:Is it possible to use SELECT * in prepared statement?是否可以在准备好的语句中使用 SELECT *?
【发布时间】:2014-03-24 10:42:19
【问题描述】:

是否可以在查询$stmt->prepare() 时使用* 并使用bind_result()
例如,我必须在 1 个表中选择 50 列,并将条件作为参数,如果我键入所有 50 列,则需要时间。 那么在这种情况下我怎样才能得到结果呢?

$stmt->prepare("Select * from table where col1 = ? and col2=? and col3=? and col4=?")
$stmt->bind_param("ssss",$col1, $col2, $col3, $col4)
$stmt->execute()

【问题讨论】:

  • 键入所有 50 列需要时间一次。每次执行查询时,不输入所有 50 列将花费额外的时间。您的选择。
  • 第一次不输入 50 个列名可能会在以后花费数小时和数小时的额外调试时间。

标签: php mysql mysqli prepared-statement


【解决方案1】:

是的,当然。
只需使用$res = $stmt->get_result() 后跟熟悉的$row = $res->fetch_assoc() 东西

但是,对于新手来说,确实严格建议您选择 PDO 而不是 mysqli。

【讨论】:

【解决方案2】:

mysqli只使用问号作为占位符,所以你可以像往常一样使用*。

【讨论】:

    【解决方案3】:

    为了节省时间,如果您使用的是 PDO,您可以命名您的参数,然后批量分配它们。
    例如

    $sql = 'SELECT *
        FROM table
        WHERE col1=:myval OR col2=:myval OR col3=:myval';
    $sth = $dbh->prepare($sql);
    $sth->execute(array(':myval ' => 150));
    $red = $sth->fetchAll();
    

    【讨论】:

    • 更新了我的答案。由于准备语句,我完全错过了 mysqli 关键字(误认为是 mysql)并假设为 PDO
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多