2013-03-26 2 views
5

Ho scritto la seguente query in Drupal6.Qual è l'errore nella query di seguito?

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

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

Si suppone che restituisca il valore 1. Ma non visualizza nulla. Se copio ed eseguo nell'editor mysql, ritorna correttamente.

Ma ora è vuoto. Nessun errore nelle connessioni al database, ecc. Perché altre query funzionano perfettamente.

Quale potrebbe essere l'errore qui?

+0

Forse visualizzare la query nella tua pagina per vedere se sta prendendo le variabili correttamente. – ophintor

+0

stai provando a cercare uno schema di corde? –

+0

@ophintor Prende i valori perfettamente. –

risposta

0

Tutto quello che posso vedere l'errore è a causa di {}

dovrebbe essere

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

No. In Drupal possiamo accedere a query come questa. Anche se rimuovo quelle parentesi, non ottengo alcun risultato. –

+0

@EdwinAlex Se si esegue la stessa query con '{}' è il risultato in 'phpmyadmin'? –

+0

in phpmyadmin, non possiamo correre così. Ho rimosso {} ed eseguito. Dà l'output esatto. –

-1

si dovrebbe provare COME operatore per la ricerca di un picchiettio. Per esempio WHERE column_name LIKE '%searchString' cercherà dove il record inizia con searchString.

Per ulteriori informazioni su Come è possibile cercare.

+0

Non sto cercando alcun modello. Voglio solo ottenere l'output 1 (o) 0. Per questo sto confrontando un id e una stringa –

+0

Ok, mi dispiace. hai var_dump ($ result)? –

+0

LIKE non è sempre necessario, il = è perfettamente valido se questo è ciò che intendono –

-2

favore usa:

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

invece di

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

{} parentesi graffe sono stati rimossi.

+0

questo è assolutamente sbagliato per Drupal 6 - si dovrebbe usare '{}' in modo che Drupal possa riscrivere la tabella nomi con prefissi se necessario. Inoltre, se leggi i commenti qui sotto, questo è stato provato e non ha funzionato per il debug. – hexblot

0

Prova un

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

e vedere cosa dati è nel manico. Questo potrebbe darti un'idea migliore di cosa sta andando storto. Il mio suggerimento è di passare a PDO ma so che non sarà un'opzione valida quando un sistema utilizza già un meccanismo DB diverso.

+0

ewww ha appena guardato il tipo di connessione in drupal 6 per assicurarsi che non stavo parlando nel mio culo nel suggerire l'uso di PDO e non usano nemmeno mysqli [visualizza sorgente] (http://api.drupal.org/api/drupal /includes%21database.mysql.inc/6) – Scottzozer

0

Se 'SHOW_SCORE_TO_STUDENT' è lo stesso ogni volta perché non utilizzare:

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

Inoltre si ha '' in tutto il secondo parametro, ma non il primo, non so se questo potrebbe essere il problema?

+0

Il primo è un valore intero e il secondo è un tipo varchar. Inoltre, se utilizziamo la tua query, essa conduce all'iniezione SQL. Questo è vulnerabile. –

+0

Perché ciò comporterebbe un'iniezione SQL? passando l'unico parametro allo stesso modo della query originale e il valore per la chiave di registro non può essere modificato dall'utente? – joakaune

+0

Non vedo alcuna differenza tra questi due. SHOW_SCORE_TO_STUDENT è una costante. Può essere modificato in base alle impostazioni di configurazione. Così può passare anche così. –