来自第一个查询返回的第二个查询的结果
问题描述:
在我的代码中,我正在检查数据库中是否存在一个值。如果它确实存在,并且应该返回错误。但是,如果它不...应该在db中创建值。这是我的代码:来自第一个查询返回的第二个查询的结果
/**
* Check if the string has been used before
*
* @return bool
*/
private function _checkStringBeenUsed()
{
echo "Running check!\n";
if ($this->_sString === null) {
parent::showErrorMessage('Invalid shared String', 1005);
}
$this->_validateString();
$sSql = "SELECT * FROM operator_string WHERE
operatorId = '{$this->_sOperator}' AND
sharedString = '{$this->_sString}' AND
time >= DATE_SUB(
NOW(),
INTERVAL 1 DAY
)";
$rQur = $this->_oDb->query($sSql);
echo $sSql;
echo "\n\n";
echo "Rows: " . $rQur->num_rows;
echo "\n\n";
if ($rQur->num_rows > 0) {
parent::showErrorMessage('Shared string already used', 1005);
} else {
$sSql = "INSERT INTO operator_string
(operatorId, sharedString, time, hash)
VALUES
('{$this->_sOperator}',
'{$this->_sString}',
NOW(),
'{$this->_sHash}'
)";
$this->_oDb->query($sSql);
}
}
/**
* Validates the string and the hash
*
* @return void
*/
private function _validateString()
{
$sHashString = $this->_sOperator . $this->_sSharedSecret . $this->_sString;
$sHash = hash('sha256', $sHashString);
if ($sHash != $this->_sHash) {
parent::showErrorMessage('Invalid authentication hash send', 1006);
}
}
这是输出,当我从我的iPhone上运行命令:
2013-03-27 21:43:08.560 MyApp[45315:c07] Result: Running check!
SELECT * FROM operator_string WHERE
operatorId = 'a8198231u82' AND
sharedString = 'cqCEYGIbNvF7HU1' AND
time >= DATE_SUB(
NOW(),
INTERVAL 1 DAY
)
Rows: 1
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE error>
<error>
<errorCode>1005</errorCode>
<errorMessage>Shared string already used</errorMessage>
</error>
怎么会是1列,如果表中的前没有数据呼叫正在运行?该方法只运行一次,插入完成在之后,执行选择。
编辑1
如果我注释掉插入SQL行,它不添加任何东西到数据库。
您确定'$ rQur-> num_rows'包含有效值吗? – Uby 2013-03-27 21:05:10
是的。如果我转储'$ rQur-> fetch_assoc()'我得到实际的行,那应该在几行后添加。 – 2013-03-27 21:09:00
找到了。我在我的子类中添加了'mysqli_autocommit($ this,false);'解决了这个问题。 – 2013-03-27 21:53:34