php mysql编写的语句不会插入

时间:2014-03-06 13:50:14

标签: php mysqli prepared-statement

我有一个奇怪的问题让我发疯。 我第一次将数据插入到mysql表中时,它可以工作。之后它无声地失败了。 这是表格:

$students =
    'CREATE TABLE IF NOT EXISTS students (
         student_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
         nombre VARCHAR(255) NOT NULL,
         apellido VARCHAR(255) NOT NULL,
         natalicio INT NOT NULL,
         cuil INT UNIQUE NOT NULL,
         trabajador_teatro TINYINT NOT NULL, 
         ocupacion VARCHAR(255),
         derivado_ministerio TINYINT NOT NULL,
         ex_alumno TINYINT NOT NULL, 
         intereses VARCHAR(255),
         matricula VARCHAR(255)  NOT NULL,
         estudios_formales VARCHAR(255),
         domicilio VARCHAR(255),
         mail VARCHAR(255) NOT NULL,
         mail_confirmation_key VARCHAR(255) ,
         created INT,
         tel INT NOT NULL,
         active TINYINT NOT NULL
         )';

这是插入数据的方法,记住,第一次插入效果很好:

/

/Insert user data
    public function insertStudent($options, $db_object) {

    $sql='INSERT INTO students (nombre, apellido, natalicio, cuil, trabajador_teatro, ocupacion,
        derivado_ministerio, ex_alumno, intereses, matricula, estudios_formales, domicilio, mail, mail_confirmation_key,
        created, tel, active)
         VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';


            if (is_array($options) ) {
                $nombre = $options['nombre'];
                $apellido = $options['apellido'];
                $natalicio = $options['natalicio'];
                $cuil = $options['cuil'];
                $trabajador_teatro = $options['trabajador_teatro'];
                $ocupacion = $options['ocupacion'];
                $derivado_ministerio = $options['derivado_ministerio'];
                $ex_alumno = $options['ex_alumno'];
                $intereses = $options['intereses'];
                $estudios_formales = $options['estudios_formales'];
                $domicilio = $options['address'];
                $mail = $options['mail'];
                $tel = $options['tel'];
            }//End if
                $mail_confirmation_key = $this->mailConfKey();
                $date =  new DateTime();
                $created = $date->getTimestamp();
                $active = 0;
                $matricula = 'TAE'."-".ceil((substr($cuil, 4)+$created)/5);
        /* Prepare statement */
        $stmt = $db_object->prepare($sql);
        if($stmt === false) {
          trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $db_object->error, E_USER_ERROR);
        }//End if

        /* Bind parameters. TYpes: s = string, i = integer, d = double,  b = blob */
        $stmt->bind_param('ssiiisiissssssiii',$nombre, $apellido, $natalicio, $cuil, $trabajador_teatro, $ocupacion, $derivado_ministerio,
            $ex_alumno, $intereses, $matricula, $estudios_formales, $domicilio, $mail, $mail_confirmation_key, $created, $tel, $active);

        /* Execute statement */
        $stmt->execute();
        echo $stmt->insert_id;
            echo $stmt->affected_rows;               
        $stmt->close();

    }//End insertStudent

没有apache2日志错误。这些是mysql日志,第一个有效的查询,以及后续无效的查询。

First Query
61 Prepare   INSERT INTO students (nombre, apellido, natalicio, cuil, trabajador_teatro, ocupacion,
                derivado_ministerio, ex_alumno, intereses, matricula, estudios_formales, domicilio, mail, mail_confirmation_key,
                created, tel, active)
                 VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
                   61 Execute   INSERT INTO students (nombre, apellido, natalicio, cuil, trabajador_teatro, ocupacion,
                derivado_ministerio, ex_alumno, intereses, matricula, estudios_formales, domicilio, mail, mail_confirmation_key,
                created, tel, active)
                 VALUES ('Diego','Lopez',1395975600,20218976543,1,'Surfer',1,0,'Volar','TAE-280617849','primario','20 1122','test@test.com','jtvSRLYfU8uyiHVh6gPp',1394$
                  61 Close stmt


Second query
72 Prepare   INSERT INTO students (nombre, apellido, natalicio, cuil, trabajador_teatro, ocupacion,
                derivado_ministerio, ex_alumno, intereses, matricula, estudios_formales, domicilio, mail, mail_confirmation_key,
                created, tel, active)
                 VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
                   72 Close stmt
                   72 Quit

我从$ _POST获取数据并使用它。这只是一个测试版,我知道它没有经过适当的消毒。

$nombre =  stripcslashes($_POST['nombre']);
$apellido = stripcslashes($_POST['apellido']);
$natalicio = $core->formatTimeToUs($_POST['birthday']);
$mail = $_POST['mail'];
$address = stripcslashes($_POST['address']);
$tel = stripcslashes($_POST['tel']);
$cuil = stripcslashes($_POST['cuil']);
$curso = stripcslashes($_POST['curso']);
$niv_educ = stripcslashes($_POST['niv_educ']);
$trabajador_teatro = stripcslashes($_POST['trabajador_teatro']);
$ocupacion = stripcslashes($_POST['ocupacion']);
$derivado_ministerio = stripcslashes($_POST['derivado_ministerio']);
$ex_alumno  = stripcslashes($_POST['ex_alumno']);
$intereses  = stripcslashes($_POST['intereses']);
$estudios_formales = stripcslashes($_POST['niv_educ']);

$student = new student();


$student_user_array = array('nombre'=>$nombre, 'apellido'=>$apellido ,  'natalicio'  => $natalicio,  'cuil'=>$cuil, 'mail' => $mail, 'address' =>  $address, 'tel' => $tel,
'curso'=>$curso, 'niv_educ'=>$niv_educ, 'trabajador_teatro' => $trabajador_teatro, 'ocupacion' => $ocupacion, 
'ex_alumno' => $ex_alumno, 'intereses'=>$intereses, 'estudios_formales'=> $estudios_formales, 'derivado_ministerio'=>$derivado_ministerio);


$student->insertStudent($student_user_array, $conn);    

希望有人能指出我正确的方向。 提前致谢。 塞巴斯蒂安

0 个答案:

没有答案