2010-06-01 11 views
6

मैं ज़ेंड फ्रेमवर्क की जांच कर रहा हूं और वर्तमान में एसक्यूएल क्वेरी की परिणामी पंक्तियों की गिनती में फंस गया हूं ... हर विधि जो मैं कोशिश करता हूं (दस्तावेज और कुछ ब्लॉगपोस्ट और ट्यूटोरियल से) एक त्रुटि देता है (जैसे Call to undefined function) या बस गलत मान देता है।ज़ेंड फ्रेमवर्क - चुनिंदा खंड में पंक्तियों की गिनती?

$checkquery = $db->select() 
    ->from('users', '*') 
    ->where('login = ?', $login) 
    ->where('password = ?', $password) 
    ->query(); 

$checkrequest=$checkquery->fetchAll()->num; 

इसके अलावा rowCount() और count(fetchRow()) और count(fetchAll()->toArray()):

मैं इस की कोशिश की है:

$checkquery = $db->select() 
    ->from('users', 'COUNT(*)') 
    ->where('login = ?', $login) 
    ->where('password = ?', $password) 
    ->query(); 

$checkrequest=fetchRow($checkquery)->num; 

... तो यह एक:

$checkquery = $db->select() 
    ->from('users', '*') 
    ->where('login = ?', $login) 
    ->where('password = ?', $password) 
    ->query(); 

$checkrequest=count($checkquery->fetchAll()); 

और यहां तक ​​कि। लेकिन हमेशा मुझे सम्मिलित समारोह में डीबी में एक त्रुटि संदेश या डुप्लिकेट आवेषण मिला। तो ज़ेंड फ्रेमवर्क 1.9 में चयन खंड में परिणामी पंक्ति गणना करने का सही तरीका क्या है (मैं इसका उपयोग करता हूं)?

उत्तर

15

उपयोग तुम क्या करने की कोशिश कर रहे इस प्रकार है:

  • आपकी क्वेरी लॉगिन बीच भेद नहीं करता नहीं मिला और गलत पासवर्ड:

    $checkquery = $db->select() 
        ->from("users", array("num"=>"COUNT(*)")) 
        ->where("login = ?", $login) 
        ->where("password = ?", $password); 
    
    $checkrequest = $db->fetchRow($checkquery); 
    echo $checkrequest["num"]; 
    

    मैं अन्य सुझावों की एक जोड़ी ।

  • आपके पासवर्ड सादा पाठ में संग्रहीत किए जा सकते हैं, जो security risk है। आपको one-way hash function and salting का उपयोग करना चाहिए।

मैं इस तरह क्वेरी पुनर्गठन होगा:

$checkquery = $db->select() 
    ->from("users", array("pwd_is_correct"=> 
    $db->quoteInto("(password = SHA1(CONCAT(salt, ?)))", $password))) 
    ->where("login = ?", $login); 

$checkrequest = $db->fetchRow($checkquery); 
if ($checkrequest === false) { 
    echo "no such login\n"; 
} else if ($checkrequest["pwd_is_correct"] > 0) { 
    echo "login and password are correct\n"; 
} else { 
    echo "login found but password is incorrect\n"; 
} 

आप उपयोगकर्ता के लिए अलग अलग मामलों की रिपोर्ट करने की जरूरत नहीं है - वास्तव में यह सबसे अच्छा सुरक्षा अभ्यास नहीं है उन्हें बताना जिनमें से लॉगिन या पासवर्ड गलत है। लेकिन हो सकता है कि आप अपने कोड में जानना चाहें ताकि आप एक ऐसे खाते को लॉक कर सकें जो बहुत से असफल पासवर्ड प्राप्त कर रहा हो।

SHA1()SHA2() जितना अच्छा नहीं है available in MySQL 5.5 और बाद में है।

+0

धन्यवाद! tho, $ पासवर्ड वैरिएबल md5 नमक के साथ धोया गया है – moogeek

संबंधित मुद्दे