WAMP Server mySQL数据类型? mySQL数据库没有用PHP更新?

时间:2016-07-22 06:59:52

标签: php mysql wamp wampserver

我正在编写一个在服务器上运行的PHP页面并接受一些POST参数,并在使用REGEX验证它们之后将它们添加到服务器。出于某种原因,我的服务器(使用WAMP服务器)在代码成功运行后以及在我最终重定向到页面后显示空结果集。

我认为它可能是我的代码,但它也可能是服务器的设置方式,目前,我的所有列都是“int(11)”类型,我不知道选择哪种类型。 / p>

<?php
if(isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["pnumber"])){
    $name = $_POST["name"];
    $number = $_POST["pnumber"];
    $email = $_POST["email"];
    $db = new PDO("mysql:dbname=daythree", "root",  "");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    if( preg_match("/^[0-9]{10}$/", $number) && 
        preg_match("/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name) && 
        preg_match("/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email)){

        $sql = "INSERT INTO daythree ('name', 'email', 'number') VALUES ('. $name .', '. $email. ', '. $number .')";

        header("Location: evilmasterminds.php");
        die();
    }

}

感谢并为任何麻烦道歉。

1 个答案:

答案 0 :(得分:0)

未经测试但是当您使用PDO时可能更像以下内容 - 它至少应该指向正确的方向。

if(isset($_POST["name"],$_POST["email"],$_POST["pnumber"])){

    $name = $_POST["name"];
    $number = $_POST["pnumber"];
    $email = $_POST["email"];


    try{
        $db = new PDO("mysql:dbname=daythree", "root",  "");
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        if( preg_match( "/^[0-9]{10}$/", $number ) && 
            preg_match( "/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name ) && 
            preg_match( "/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email ) ){


            $sql='insert into `daythree` (`name`,`email`,`number`) values (:name,:email,:number);';
            $stmt=$db->prepare($sql);
            $stmt->execute(array(
                ':name'     =>  $name,
                ':email'    =>  $email,
                ':number'   =>  $number
            ));

            exit( header("Location: evilmasterminds.php") );
        }

    }catch( PDOException $e ){
        exit('Error: '.$e->getMessage());
    }
}

至于列类型nameemail几乎肯定是varcharnumber可能是int,具体取决于您收到的数字中使用的实际格式 - 再次varchar列可能更合适。

更新: 代码更改为考虑@riggsfolly关于异常的点