2013-10-07 8 views
5

संपादित करें: मुझे एहसास हुआ कि मेरी समस्या यह थी कि मैं $ user_id डालने की कोशिश कर रहा था, जिसमें कॉलम user_id में संख्याओं के साथ एक स्ट्रिंग है, जो कि प्रकार है पूर्णांक। मैं एक पूर्णांक में स्ट्रिंग बदल दिया। मैं अभी भी काफी हालांकि त्रुटियों को समझ नहीं किया था, लेकिन है कि क्योंकि समय की कमी की है। मैं इसे वापस करने के लिए कुछ अन्य समय मिल जाएगा।PHP के माध्यम से mySQL क्वेरी में "डालें" काम करने लगता है, लेकिन कुछ भी नहीं जोड़ा गया है

मैं एक निर्माण करने के लिए कोशिश कर रहा हूँ http://www.php-login.net पर उपलब्ध PHP लॉगिन प्रणाली के उन्नत संस्करण के शीर्ष पर वेबसाइट। स्क्रिप्ट के पंजीकरण वर्ग में, एक ऐसा फ़ंक्शन है जो डेटाबेस में एक नया उपयोगकर्ता जोड़ता है, और वह कोड पूरी तरह से ठीक काम करता है:

$query_new_user_insert = $this->db_connection->prepare('INSERT INTO users (user_name, user_password_hash, user_email, user_activation_hash, user_registration_ip, user_registration_datetime) VALUES(:user_name, :user_password_hash, :user_email, :user_activation_hash, :user_registration_ip, now())'); 
$query_new_user_insert->bindValue(':user_name', $user_name, PDO::PARAM_STR); 
$query_new_user_insert->bindValue(':user_password_hash', $user_password_hash, PDO::PARAM_STR); 
$query_new_user_insert->bindValue(':user_email', $user_email, PDO::PARAM_STR); 
$query_new_user_insert->bindValue(':user_activation_hash', $user_activation_hash, PDO::PARAM_STR); 
$query_new_user_insert->bindValue(':user_registration_ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR); 
$query_new_user_insert->execute(); 

// id of new user 
      $user_id = $this->db_connection->lastInsertId(); 

      if ($query_new_user_insert) { 
       // send a verification email 
       if ($this->sendVerificationEmail($user_id, $user_email, $user_activation_hash)) { 
        // when mail has been send successfully 
        $this->messages[] = $this->lang['Verification mail sent']; 
        $this->registration_successful = true; 
       } else { 
        // delete this users account immediately, as we could not send a verification email 
        $query_delete_user = $this->db_connection->prepare('DELETE FROM users WHERE user_id=:user_id'); 
        $query_delete_user->bindValue(':user_id', $user_id, PDO::PARAM_INT); 
        $query_delete_user->execute(); 

        $this->errors[] = $this->lang['Verification mail error']; 
       } 
      } else { 
       $this->errors[] = $this->lang['Registration failed']; 
      } 
,210

मैं निम्नलिखित कोड का उपयोग कर साइट के किसी अन्य भाग के लिए है कि कोड को कॉपी करने की कोशिश की:

public function addNewTag($postContent) { 
    if ($this->databaseConnection()) { 
     $query_add_tag = $this->db_connection->prepare('INSERT INTO tags (tag_name, tag_short_name, tag_id, color, user_id, creation_time) 
VALUES(:tag_name, :tag_short_name, :tag_id, :color, :user_id, :creation_time)'); 
     $query_add_tag->bindValue(':tag_name', $postContent['tag_name'], PDO::PARAM_STR); 
     $query_add_tag->bindValue(':tag_short_name', $postContent['tag_short_name'], PDO::PARAM_STR); 
     $query_add_tag->bindValue(':tag_id', rand(100000000000, 999999999999), PDO::PARAM_STR); 
     $query_add_tag->bindValue(':color', $postContent['color'], PDO::PARAM_STR); 
     $query_add_tag->bindValue(':user_id', $user_id, PDO::PARAM_STR); 
     $query_add_tag->bindValue(':creation_time', time(), PDO::PARAM_STR); 
     $query_add_tag->execute(); 
     if ($query_add_tag) { 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 

समारोह कोड के साथ $ postContent के लिए चर के रूप में $ _POST साथ कहा जाता है

$content->addNewTag($_POST); 

जब मैं ऐसा करता हूं, फ़ंक्शन सत्य ("1") देता है, लेकिन जब मैं अपनी डेटाबेस सामग्री की जांच करता हूं, तो कुछ भी नहीं जोड़ा जाता है। यहां मुद्दा क्या हो सकता है? मैं mySQL के साथ इतना अच्छा नहीं हूं, इसलिए शायद यह मेरी लिपि में कहीं और एक स्पष्ट त्रुटि है।

+3

'$ query_add_tag' हमेशा एक पीडीओएसएटमेंट ऑब्जेक्ट होता है। यह निष्पादन विफलता पर एक झूठा मूल्य नहीं बन जाएगा, इसलिए आप 'if ($ query_add_tag) ' –

+0

का परीक्षण नहीं कर सकते [पीडीओ त्रुटि प्रबंधन मैनुअल] (http://php.net/manual/en/pdo.error] पर एक नज़र डालें -handling.php)। एक त्रुटि विधि चुनें, डिफ़ॉल्ट मौन विफलता है, जो आप देख रहे हो सकता है। –

+0

यदि आप फ़ंक्शन की शुरुआत में $-- डेटाबेस कनेक्शन कनेक्शन के var_dump करते हैं तो आउटपुट क्या होता है? –

उत्तर

0

क्या आप autocommit=0 में चल रहे हैं? यदि ऐसा है, तो कृपया autocommit=1 सेट करें या अपने फ़ंक्शन के अंत में प्रतिबद्ध जोड़ें। कुछ ऐसा होना चाहिए:

$query_add_tag->commit(); 
संबंधित मुद्दे