同一连接中的连续查询不工作


Consecutive queries in same connection not working

下面的代码工作得很好,但是$connection->query('call user_create(145552, ''a@a.com'');');行没有在数据库中创建用户。

function updateFacebook($id) {
    $connection = mysqli_connect('localhost', 'root', '', 'databasename');
    $count = $connection->query('call user_by_facebook_read(' . $id . ');')->num_rows;
    if ($count == 0) {
        $request = 'Slim'Slim::getInstance()->request();
        $body = $request->getBody();
        $json = json_decode($body);
        $token = $json->token;
        $facebook = new Facebook(array(
            'appId' => 'value',
            'secret' => 'value',
            'cookie' => true
        ));
        $facebook->setAccessToken($token);
        $facebook->api('/me/feed', 'post', array(
            'message' => 'message',
            'picture' => 'https://www.google.com.br/images/srpr/logo4w.png',
            'link' => 'https://www.google.com.br',
            'description' => 'description',
            'name' => 'name',
            'caption'=> 'caption'
        ));
        $connection->query('call user_create(145552, ''a@a.com'');');
    }
    $connection->close;
    $json = json_encode(array(
        'r' => true
    ));
    echo $json;     
}

如果我运行下面的代码,它也可以正常工作:

$connection = mysqli_connect('localhost', 'root', '', 'databasename');
$connection->query('call user_create(145552, ''a@a.com'');');
$connection->close;

如果我在$count之后关闭连接,并在user_create调用之前再次打开它,它也可以工作。

发生了什么事?

您需要在结果上运行->close(),但您丢弃了它。所以:

 $result = $connection->query(..);
 $count = $result->num_rows;
 $result->close();

和之后的CALL()s在MySQLi似乎需要这个:

 $connection->next_result();