2013-03-26 24 views
5

我已經在Drupal6中寫下了以下查詢。以下查詢中的錯誤是什麼?

$sql = 
    "SELECT registryvalue 
    FROM {muln_registry} 
    WHERE fk_applicationid = %d 
    AND registrykey = '%s'"; 

$result = db_result(db_query($sql, 32, 'SHOW_SCORE_TO_STUDENT')); 

它應該返回值1.但它沒有顯示任何東西。如果我複製並在MySQL編輯器中運行,它會正確返回。

但現在它給空了。數據庫連接等沒有錯誤,因爲其他查詢運行完美。

這可能是什麼錯誤嗎?

+0

也許在您的頁面中顯示查詢,看看它是否正確使用變量。 – ophintor 2013-03-26 09:57:58

+0

你想要搜索一個字符串模式? – 2013-03-26 09:58:40

+0

@ophintor它需要完美的價值。 – 2013-03-26 10:03:24

回答

0

所有我能看到的錯誤是因爲{}

應該

$sql = "SELECT registryvalue FROM muln_registry WHERE fk_applicationid = %d AND registrykey = '%s'"; 
+0

不。在Drupal中,我們可以像這樣訪問查詢。即使我刪除這些括號,我沒有得到任何輸出。 – 2013-03-26 10:02:57

+0

@EdwinAlex如果使用'{}'運行相同的查詢,是否會在'phpmyadmin'中給出結果? – 2013-03-26 10:05:59

+0

在phpmyadmin中,我們不能這樣運行。我刪除{}並執行。它給出了確切的輸出。 – 2013-03-26 10:07:26

-1

你應該嘗試像運營商用於搜索圖案。例如 WHERE column_name LIKE '%searchString'將搜索以searchString開頭的記錄。

有關就像你可以搜索它的更多信息。

+0

我不搜索任何模式。我只想得到輸出1(或)0.爲此,我比較一個ID和字符串 – 2013-03-26 10:09:31

+0

好吧,我很抱歉。你有var_dump($結果)? – 2013-03-26 10:12:18

+0

LIKE並不總是需要的,= =完全有效,如果這是他們的意圖 – 2013-03-26 10:12:46

-2

請使用:的

$sql  = "SELECT registryvalue FROM muln_registry WHERE fk_applicationid = %d AND registrykey = '%s'"; 

代替

$sql  = "SELECT registryvalue FROM {muln_registry} WHERE fk_applicationid = %d AND registrykey = '%s'"; 

{}大括號已被刪除。

+0

這是Drupal 6的錯誤 - 你應該使用'{}名稱帶有前綴如果需要。另外,如果你閱讀下面的評論,這已經嘗試過,並沒有用於調試。 – hexblot 2013-03-26 10:16:01

0

嘗試

echo '<pre>'; 
var_dump(db_query($sql, 32, 'SHOW_SCORE_TO_STUDENT')); 
echo '</pre>'; 

而且看到的是在手柄的數據。這可能會讓您更好地瞭解發生了什麼問題。我的建議是切換到PDO,但我知道,當系統已經使用不同的DB機制時,這不會是一個有效的選項。

+0

ewww剛剛查看了drupal 6中的連接類型,以確保我沒有說出我的屁股建議使用PDO,他們甚至不使用mysqli [查看源代碼](http://api.drupal.org/api/drupal /includes%21database.mysql.inc/6) – Scottzozer 2013-05-02 20:40:54

0

如果「SHOW_SCORE_TO_STUDENT」是每次都一樣,爲什麼不使用:

$sql = "SELECT registryvalue FROM {muln_registry} WHERE fk_applicationid = '%d' AND registrykey = 'SHOW_SCORE_TO_STUDENT'"; 

你也有'周圍的第二個參數,但不是第一位的,不知道這可能是什麼問題?

+0

第一個是整數值,第二個是varchar類型。此外,如果我們使用您的查詢,它會導致SQL注入。這是脆弱的。 – 2013-05-06 05:13:02

+0

爲什麼會導致SQL注入?你傳遞唯一參數的方式與原始查詢相同,並且registrykey的值不能被用戶更改? – joakaune 2013-05-06 06:52:55

+0

我沒有看到這兩者之間的任何區別。 SHOW_SCORE_TO_STUDENT是一個常量。它可以根據配置設置進行更改。所以也可以這樣傳球。 – 2013-05-06 08:08:17