2015-09-08 111 views
1
// Check for existence - don't add a duplicate 
$sqlQuery = $pdo->prepare('SELECT campaign_id FROM campaigns WHERE (customer_id=:customerId) AND (title=:campaignTitle) AND (description=:campaignDescription) AND (start_time=:startTimeStamp) AND (end_time=:endTimeStamp)'); 

$sqlQuery->bindParam(':customerId', $customerId); // , PDO::PARAM_INT 
$sqlQuery->bindParam(':campaignTitle', $campaignTitle); 
$sqlQuery->bindParam(':campaignDescription', $campaignDescription); 
$sqlQuery->bindParam(':startTimeStamp', $campaignTitle); 
$sqlQuery->bindParam(':endTimeStamp', $endTimeStamp); 

$sqlResult = DatabaseCommand($sqlQuery); 

結果我的PDO聲明有什麼問題?

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':customerId) AND (title=:campaignTitle) AND (description=:campaignDescription) A' at line 1' in E:\coding\Web Development\Xampp\htdocs\api\addCampaign.php:42 Stack trace: #0 E:\coding\Web Development\Xampp\htdocs\api\addCampaign.php(42): PDO->query('SELECT campaign...') #1 {main} thrown in E:\coding\Web Development\Xampp\htdocs\api\addCampaign.php on line 42

,但我不明白爲什麼


[更新]對於那些誰希望看到的DatabaseCommand()這個代碼是相當多了。

function DatabaseCommand($sqlCommand) 
{ 
    $result = $sqlCommand->execute(); 
    return $result; 
} 

有一些額外的代碼,但只是記錄命令用於調試鼠海豚,檢查錯誤,記錄這些,捕獲異常&電子郵件我。

+0

語法看起來很好,所以很可能是訪問衝突。確保你對該數據庫/表具有所需的「讀取」權限。 –

+0

Parenethis不需要。你可以發佈DatabaseCommand()方法嗎?該查詢如下所示:「SELECT campaign_id FROM campaigns WHERE customer_id =:customerId AND title =:campaignTitle AND description =:campaignDescription AND start_time =:startTimeStamp AND end_time =:endTimeStamp」。用第一個括號查詢是在哪裏(未設置)=(條件=值) –

+2

什麼是'DatabaseCommand()'?它有什麼作用?該命令不是標準PDO afaik的一部分。 –

回答

2

更新:好像這不是解決辦法,既提高了可讀性

=和參數之間的空間:

$sqlQuery = $pdo->prepare('SELECT campaign_id FROM campaigns WHERE (customer_id= :customerId) AND (title= :campaignTitle) AND (description= :campaignDescription) AND (start_time= :startTimeStamp) AND (end_time= :endTimeStamp)'); 
+0

你是**是否確定**?1)這聽起來很奇怪2)這工作'$ sqlQuery = $ pdo-> prepare('SELECT * FROM campaigns where customer_id =:customer');' – Mawg

+0

不,我不確定。我只知道PDO得到了奇怪的解析問題。我會在一秒鐘內測試。 –

+2

@Mawg你是對的,這不是問題。 –

1

你這裏張貼此代碼無關用你得到的錯誤信息來做。

您必須檢查addCampaign.php文件,第42行使用query()方法而不是execute()。當然,你必須檢查正在執行的實際文件

我將藉此機會引導所有愛好者程序員的注意力,以閱讀錯誤消息的極大幫助。儘管有這樣的共同信念,但這不僅僅是一種責備,而是閱讀「你做錯了什麼!」,讓你去猜測原因,但準確而詳細的解釋。它只需要閱讀錯誤消息以獲取線索。

我也藉此機會指導所有發燒友程序員注意這樣一個事實,即如果使用僅回顯錯誤信息並留下堆棧跟蹤的常見做法,則會忽略有關錯誤真正原因的信息。

+1

在SO回答(或「猜測」)時,不是每個人都有時間分析,測試和編寫大量文本。再加上,沒有猜測我從來沒有解決過我用'PDO'(及其解析器)遇到的一些嚴重問題。 **猜猜**在「PDO」中的註釋MySQL代碼中,命名參數會發生什麼...... –

+0

請參閱關於DatabaseCommand()信息的更新問題。 – Mawg