![](/img/trans.png)
[英]how can i get two id from 1st select query and then use this to 2nd select query?
[英]Result from 2nd query returned in 1st query
在我的代碼中,我正在檢查數據庫中是否存在值。 如果存在,則應返回錯誤。但是,如果不存在,則應在數據庫中創建值。 這是我的代碼:
/**
* 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”行,則不會向數據庫添加任何內容。
似乎自動提交默認設置為True
。 我使用mysqli_autocommit($this, false);
將其切換為false mysqli_autocommit($this, false);
在我的MySqli
子類中,它解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.