× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Coroutine\MySQL->prepare

MySQL服务器发送SQL预处理请求。prepare必须与execute配合使用。预处理请求成功后,调用execute方法向MySQL服务器发送数据参数。

function Coroutine\MySQL->prepare(string $sql, float $timeout) : bool

需要2.0.11或更高版本

参数

  • $sql 预处理语句,使用?作为参数占位符
  • $timeout 超时时间

返回值

  • 失败返回false,可检查$db->error$db->errno判断错误原因
  • 成功返回Coroutine\MySQL\Statement对象,可调用对象的execute方法发送参数

示例

use Swoole\Coroutine as co;
co::create(function() {
    $db = new co\MySQL();
    $server = array(
        'host' => '127.0.0.1',
        'user' => 'root',
        'password' => 'root',
        'database' => 'test',
    );

    $ret1 = $db->connect($server);
    $stmt = $db->prepare('SELECT * FROM userinfo WHERE id=?');
    if ($stmt == false)
    {
        var_dump($db->errno, $db->error);
    }
    else
    {
        $ret2 = $stmt->execute(array(10));
        var_dump($ret2);
    }
});

  • 北极以北☏

    okok终于支持了

  • lovejocky

    话说,现在github上的swoole还没有2.0.11的版本啊

  • 帝豪

    $stmt->execute()应该改为$db->execute()

  • 当时只道是寻常

    $db->prepare('SELECT * FROM userinfo WHERE id=?');执行成功返回的true吧,不是一个对象。Call to a member function execute() on boolean

  • 龍/aiq飛

    不能使用bindParam 绑定参数吗?

  • 赞

    发现占位符不能太多,否则就会报错:Prepared statement contains too many placeholders 不适合做大批量插入,估计在5W个占位符左右就是上限了