2013-03-27 209 views
2

在我的代碼中,我正在檢查數據庫中是否存在一個值。如果它確實存在,並且應該返回錯誤。但是,如果它不...應該在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行,它不添加任何東西到數據庫。

+0

您確定'$ rQur-> num_rows'包含有效值嗎? – Uby 2013-03-27 21:05:10

+0

是的。如果我轉儲'$ rQur-> fetch_assoc()'我得到實際的行,那應該在幾行後添加。 – 2013-03-27 21:09:00

+0

找到了。我在我的子類中添加了'mysqli_autocommit($ this,false);'解決了這個問題。 – 2013-03-27 21:53:34

回答

0

似乎autocommit默認設置爲True。我在MySqli的子類中使用mysqli_autocommit($this, false);將其切換爲false,並解決了我的問題。

相關問題