dtjwov4984 2015-06-16 20:30
浏览 62
已采纳

MySQLi编写的语句:一行中的短版本

In PHP, I use a lot of one liners like:

Fetch value:

$sql->query("SELECT ID FROM table WHERE condition = 1")->fetch_object()->ID;

Fetch row:

$sql->query("SELECT * FROM table WHERE condition = 1")->fetch_assoc();

Fetch rows:

$sql->query("SELECT * FROM table WHERE condition > 1")->fetch_all(MYSQLI_ASSOC);

Insert row:

$sql->query("INSERT INTO table(`row1`,`row2`) VALUES('".$data1."','".$data2."')");

Delete row:

$sql->query("DELETE FROM table WHERE condition = 1");

Are there also beautiful one liners for prepared statements?

This fails:

$sql->prepare("SELECT ID FROM table WHERE condition = ?")->bind_param("i", $a=1)->execute()->fetch_object()->ID;

This works:

$query = $sql->prepare("SELECT ID FROM table WHERE condition = ?");
$query->bind_param("i", $a=1);
$query->execute();
$query->get_result()->fetch_object()->ID;
  • 写回答

2条回答 默认 最新

  • drf65218 2015-06-16 20:36
    关注

    Directly - there is no way. But you may use a simple overlay class which will allow you to do so.

    class PrepareOverlay {
        private $stmt;  
        private $lastResult = null;      
    
        public function __construct(PDOStatement $stmt) {
            $this->stmt = $stmt;
        }
    
        public function __call($name, $arguments) {
            $this->lastResult = call_user_func_array([$this->stmt, $name], $arguments);
            return is_bool($this->lastResult) ? $this : $this->lastResult;
        }
    
        public function getLastResult() {
            return $this->lastResult;
        }
    
        public static function prepare($sql, $query) {
            return new self($sql->prepare($query));
        }
    }
    

    And use it like this:

    PrepareOverlay::prepare($sql, 'SELECT * FROM table WHERE cond = ?')->bindParam('i', $a=1)->execute()->fetchObject()->ID;
    

    Although you will need some phpdoc to make code completion work.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了