एसक्यूएल केवल पहली पंक्ति का चयन करता है

मेरे पास लॉगिन डेटाबेस है, और मेरे पास कई उपयोगकर्ता हैं, जब मैं डेटाबेस में पहले सूचीबद्ध उपयोगकर्ता के साथ लॉग इन करने का प्रयास करता हूं, तो यह पूरी तरह से काम करता है। हालांकि, जब मैं किसी अन्य उपयोगकर्ता के साथ लॉग इन करता हूं, तो यह काम नहीं करता है, ऐसा लगता है कि यह केवल पहली पंक्ति का चयन करेगा। मेरी पूछताछ में क्या गलत है?

  $username = $_POST['Username'];
  $salt = substr($username, 0, 2);
  $password = crypt($_POST['Password'], $salt);

  $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
  $query = $dbh->prepare("SELECT * FROM `7Ducklings` WHERE Username = ? AND Password = ?");
  $array = array($username, $password);
  $query->execute($array);
  $numrows = $query->fetchColumn();

  if($numrows == 1)
  {
    echo "success";
  }
  else
  {

  }
  $dbh = null;

संपादित करें: सफलता पर जब $ numrows मुद्रित होते हैं, मुझे 1 मिलता है, अन्यथा मुझे शून्य मिलता है। क्या यह नमक की समस्या हो सकती है?

0
पीडीओएसटेमेंट ऑब्जेक्ट ([queryString] => चुनें <कोड> 7Ducklings जहां उपयोगकर्ता नाम =? और पासवर्ड =?) असफल क्वेरी
जोड़ा लेखक user2957574, स्रोत
सफलता पर भी एक ही बात है
जोड़ा लेखक user2957574, स्रोत
क्यों "7 डकलिंग्स"? क्यों "उपयोगकर्ता" नहीं? तैयार बयान का उपयोग करने के लिए आपको धन्यवाद - आपको विश्वास नहीं होगा कि कितने लोग अपने डीबी में समेकित प्रश्नों के साथ अंधेरे से डालने वाले हैं। हालांकि ... लवण को यादृच्छिक और अद्वितीय माना जाता है - मैं गारंटी देता हूं कि उपयोगकर्ता नाम के पहले दो अक्षरों का उपयोग करके, यह पर्याप्त नहीं होगा (सुरक्षा.एसई पर अधिक जानकारी है)। आमतौर पर नमक को पासवर्ड के बगल में संग्रहीत किया जाता है, इसलिए आपको पहले इसे पुनः प्राप्त करने के लिए डीबी को हिट करने की आवश्यकता होती है (हम्म, जिस तरह से आधुनिक पासवर्ड फ़ंक्शंस काम करना चाहिए, मैं डीबी पर कैल्क
जोड़ा लेखक Clockwork-Muse, स्रोत
$ Numrows और fetchColumn() का उपयोग क्यों करें? चर का नाम फ़ंक्शन रिटर्न मान से मेल नहीं खाता है ... print_r ($ query-> fetchAll ()) आज़माएं
जोड़ा लेखक Thibault, स्रोत
print_r अपने प्रश्न परिणाम?
जोड़ा लेखक Eric T, स्रोत
पहली चीज कोशिश करने में डीबी कनेक्शन की जांच करें, दूसरा टेबल नाम 7Ducklings से प्रतीकों को हटा दें।
जोड़ा लेखक Eric T, स्रोत

1 उत्तर

Modify the if statement to check for Empty or TRUE/FALSE. fetchColumn() Returns a single column from the next row of a result set or FALSE if there are no more rows. PDO FetchColumn

 $username = $_POST['Username'];
 $salt = substr($username, 0, 2);
 $password = crypt($_POST['Password'], $salt);

 $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
 $query = $dbh->prepare("SELECT * FROM `7Ducklings` WHERE Username = ? AND Password = ?");
 $array = array($username, $password);
 $query->execute($array);
 $numrows = $query->fetchColumn();

 if(!empty($numrows))
 {
echo "success";
}
else
{

}
$dbh = null;
0
जोड़ा