在我的数据库中,我有一些存储过程。
我想给其中一个打个电话,根据我从此过程中得到的结果,我将确定是否要打第二个天气。
如您所见,isUserValid()
我使用的方法$result->free_results()
但是仍然在调用其他过程时得到: Commands out of sync; you can't run this command now
这是我对db函数的调用:
/**
* Run a new query on the db.
* this will open an close the connection to the db
* @param $query string the query to run
* @param $verifyAccessToken boolean true if user validation is needed before query is executed, false otherwise
* @return bool|mysqli_result the result of the query if any or true or false in a non query
* @throws Exception on connection and query errors
*/
private function queryDb($query,$verifyAccessToken)
{
// if ($this->test)
// echo $query . "<br>";
//create a new mysqli connection
$mysqli = new mysqli($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME);
//set the charset for the connection
if (!$mysqli->set_charset("utf8"))
{
$mysqli->close();
throw new Exception ("Error setting UTF 8 DB connection");
}
//check if the connection was ok
if (mysqli_connect_errno())
{
$mysqli->close();
throw new Exception("Error connecting DB");
}
//if verification is needed - verify access token
if ($verifyAccessToken && !$this->isUserValid($mysqli))
{
$mysqli->close();
throw new Exception(ACCESS_TOKEN_INCORRECT);
}
//get results
$result = $mysqli->query($query);
//check if there were now error in query. if so - throw an exception
if (!$result)
{
$mysqlError = $mysqli->error . __LINE__;
//close the connection
$mysqli->close();
throw new Exception ("mySQL Error: " . $mysqlError);
}
//fetch the results into an array
$rows = $result->fetch_all(MYSQLI_BOTH);
//close the connection
$result->close();
$result->free();
$mysqli->close();
//return the results if any
return $rows;
}
/**
* Check if user is valid
* @param $mysqli mysqli connection to db
* @return true if user is valid, false otherwise
*/
function isUserValid($mysqli)
{
//Check if there is a saved access token. if not - throw an exception
if (is_null($this->user) || $this->user->getPicoAccessToken() == null)
throw new Exception(ACCESS_TOKEN_INCORRECT);
//get user details
$facebookId = $this->user->getFacebookId();
$picoAccessToken = $this->user->getPicoAccessToken();
//create verification query
$verificationQuery = "Call isUserValid('$facebookId','$picoAccessToken')";
//execute query
$result = $mysqli->query($verificationQuery);
//if query had error - throw exception
if (!$result)
{
$mysqlError = $mysqli->error . __LINE__;
//close the connection
$mysqli->close();
throw new Exception ("mySQL Error: " . $mysqlError);
}
$rows = $result->fetch_all(MYSQLI_ASSOC);
$rows = $rows[0];
$result->free_result();
//return user valid status
return isset($rows["isUserValid"]) && $rows["isUserValid"] == 1;
}
每个存储过程至少返回 两个 结果
您必须使用mysqli_more_results()
/ mysqli_next_result()
清洁它们。
如果您的过程仅返回一个结果,或者您只想要第一个结果,而不想要任何其他结果,则可以使用以下代码段清理结果队列:
while($mysqli->more_results())
{
$mysqli->next_result();
if($res = $mysqli->store_result())
{
$res->free();
}
}
问题内容: 我正在尝试执行我的PHP代码,该代码通过mysqli调用两个MySQL查询,并得到错误“命令不同步;您现在不能运行此命令”。 这是我正在使用的代码 我曾尝试阅读此书,但不确定该怎么做。我已经阅读了有关存储结果和免费结果的信息,但是使用它们时并没有什么区别。我不确定此错误的确切原因,并想知道其原因以及如何解决。 按照我的调试语句,由于我的sql语法near附近,甚至没有输入countQu
问题内容: 我已经将注册脚本从mysql转换为mysqli。我作为mysql正常工作,但是现在却给我错误 这是我用来注册用户的功能 电子邮件可以很好地发送来自我的阵列的正确数据。但是,没有数据插入到数据库中,并且出现了上面提到的错误。我以前从未遇到过这个错误。 问题答案: 如果 命令不同步; 您现在无法在客户端代码中运行此命令,您以错误的顺序调用了客户端函数。 例如,如果您使用的是mysql_us
问题内容: 我有一个从Python(包装在Django中)执行的MySQL存储过程。当我尝试执行第二条语句时,出现错误“命令不同步;您现在不能运行此命令”。我目前无法提交交易。当我调用过程时,这只是一个问题。该怎么办? 编辑:我被要求发布MySQL过程。我使它变得非常简单,但我仍然遇到相同的问题 问题答案: 感谢JoshuaBoshi的回答,该问题得以解决。调用该过程之后,我必须关闭游标并再次打开
我正在使用MySQL,我正在定义一个存储过程,如下所示: 当我尝试执行该过程时,会出现以下错误: 这意味着什么,我做错了什么?
问题内容: 以下代码,使用python 2.6.6和MySQLdb 1.2.2导致 命令不同步; 您不能立即运行此命令 MySQLdb异常: 在执行第二个查询期间引发异常。如我所读,异常通常是由MySQL的C API实现的限制引起的,该限制不允许并发查询执行。 如果我在上述两个查询之间重新创建游标对象,则会解决此问题,但不幸的是,该解决方案对我而言似乎并不完美。对于数据库连接和查询执行,我有一个非
我在运行命令flutter run--release时会出现很多错误。 颤振医生-V