Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysqli_query () कम से कम 2 मापदंडों की अपेक्षा करता है और mysqli_query ():खाली क्वेरी त्रुटि संदेश

लापता mysqli कनेक्शन संसाधन/वस्तु के अलावा स्क्रिप्ट के साथ कुछ अन्य मुद्दे भी हैं:

  • यह एसक्यूएल इंजेक्शन से ग्रस्त है
  • आप mysql कनेक्शन का परीक्षण नहीं कर रहे हैं जैसा कि http://docs.php पर दिखाया गया है। .net/mysqli.quickstart.connections
  • स्क्रिप्ट में सामान्य रूप से त्रुटि प्रबंधन का अभाव है। कोई भी mysqli_* फ़ंक्शन/विधियां विफल हो सकती हैं। उदा. mysqli_num_rows . के बारे में चेतावनी mysqli_query . के रिटर्न वैल्यू की जांच नहीं करने से संबंधित है ।
  • आपका फ़ंक्शन test_input() कुछ भी परीक्षण नहीं करता है लेकिन मान बदलता है; और एक ईमेल पते का htmlspecialchars() et al से कोई लेना-देना नहीं है। बस उस समारोह को छोड़ दें।
  • ईमेल पता सत्यापन स्पष्ट . के बिना अत्यधिक जटिल लगता है योग्यता।
  • किसी ईमेल पते को दो बार डालने से रोकने के लिए SELECT/INSERT कॉम्बो के बजाय बस एक अद्वितीय अनुक्रमणिका उस फ़ील्ड पर और mysql सर्वर विश्वसनीय रूप से डुप्लिकेट को रोकेगा।

जैसे

<?php
define('MYSQL_ER_DUP_KEY', 1022); // see https://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html#error_er_dup_key
$errors = array();
if($_POST) // might be superfluous
{
    // simplified email validation
    // improve if needed
    $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    if ( !$email ) {
        // removed html/style from error message, better do that when printing the error
        $errors['email1'] = "A valid email address is required";
    }

    // you only need the database connection after the email address is validated
    $mysqli = new mysqli('localhost', 'root', '','ecommerce');
    // see http://docs.php.net/mysqli.quickstart.connections
    if ($mysqli->connect_errno) {
        trigger_error("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error, E_USER_ERROR);
    }

    // not checking if this email address is already in the database
    // instead create a unique index for that field
    // see https://dev.mysql.com/doc/refman/5.6/en/constraint-primary-key.html
    // - otherwise you'd at least have to lock the table to avoid race conditions -

    // sql injections: see http://docs.php.net/security.database.sql-injection
    // to prevent sql injections you either have to make sure string literals are
    // properly encoded/escaped or use preparead statements+parameters
    $stmt = $mysqli->prepare('INSERT INTO subscriptions (email) VALUES (?)');
    if ( !$stmt ) {
        trigger_error("prepare statement failed (" . $mysqli->errno . ") " . $mysqli->error, E_USER_ERROR);
    }
    else if ( !$stmt->bind_param('s', $email) ) {
        trigger_error("bind_param failed (" . $stmt->errno . ") " . $stmt->error, E_USER_ERROR);
    }
    else if ( !$stmt->execute() ) {
        // email has a unique index, inserting an email address a second time
        // results in a ER_DUP_KEY error
        if ( MYSQL_ER_DUP_KEY==$stmt->errno ) {
            $errors['email2'] = "email address already in subsription list";
        }
        else { // otherwise it's "really" an error
            trigger_error("execute failed (" . $stmt->errno . ") " . $stmt->error, E_USER_ERROR);
        }
    }
    else {
      [... inserted ...]
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कई से कई रिश्ते

  2. Symfony2 और Doctrine2:इकाई X के लिए कोई पहचानकर्ता/प्राथमिक कुंजी निर्दिष्ट नहीं है। प्रत्येक इकाई के पास पहचानकर्ता/प्राथमिक कुंजी होनी चाहिए

  3. एकाधिक रेल ऐप, एकल MySQL डेटाबेस

  4. SQLite3 को MySQL में माइग्रेट करने का त्वरित आसान तरीका?

  5. Mysql संग्रहीत कार्य और समूहवार न्यूनतम