Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select语句中的PHP PDO错误_Php_Mysql_Pdo - Fatal编程技术网

Select语句中的PHP PDO错误

Select语句中的PHP PDO错误,php,mysql,pdo,Php,Mysql,Pdo,我和PDO有一些问题。第一个问题是,在我的连接字符串中,我不能使用在另一个文件中定义的变量。它给出了一个错误,并显示connectionstring使用变量名而不是值yes,尝试了单引号和双引号 第二个问题也是更紧迫的问题是,我在尝试验证登录时出错。我让它与旧的mysqli一起工作,所以我知道html是有效的,而不是新的逻辑。附件是我正在使用的功能: 我得到的确切错误是: Exception 'PDOException' with message 'SQLSTATE[HY000]: Genera

我和PDO有一些问题。第一个问题是,在我的连接字符串中,我不能使用在另一个文件中定义的变量。它给出了一个错误,并显示connectionstring使用变量名而不是值yes,尝试了单引号和双引号

第二个问题也是更紧迫的问题是,我在尝试验证登录时出错。我让它与旧的mysqli一起工作,所以我知道html是有效的,而不是新的逻辑。附件是我正在使用的功能:

我得到的确切错误是:

Exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2031 ' in db_backend.php:110 Stack trace: #0 db_backend.php(110): PDO->query('SELECT AcctType...') #1 newuser.php(42): validateuser('Nefer', 'neferitous@blah...') #2 {main}

提前谢谢

为了绑定参数,需要使用而不是查询

请尝试以下操作:

$stmt = $db->prepare("SELECT AcctType FROM usr WHERE LOGIN_ID=? or CONTACT_EMAIL=?;");
$stmt->execute(array(
    $un,
    $em
));

对于您的第一个问题,我非常确定您可以断开字符串并将变量连接到:

PDO("mysql:host=".$host.";dbname=".$dbname, $user, $pass,

下面是使PDO语句的这一部分工作的最后代码:

function validateuser($un, $em) {
    try {
        $db = new PDO(
            "mysql:host=localhost;dbname=db",
            'id',
            'pass',
            array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
        );
        $stmt = $db->prepare("SELECT ACCTTYPE FROM users WHERE LOGIN_ID=? or CONTACT_EMAIL=?;");
        $stmt->bindParam(1, $un, PDO::PARAM_STR, 15);
        $stmt->bindParam(2, $em, PDO::PARAM_STR, 150);
        $stmt->execute();
        $result = $stmt->fetch();
        return $result["ACCTTYPE"];
    } catch (exception $e) {
        echo $e;
    }
}

这可能是一个线索:根据这一点,您正在绑定的数据有问题。谢谢您的帮助,它帮助了我,我将把它标记为答案。但这不仅仅是这个。我必须对每个变量使用绑定才能使其工作并指定数据类型。我已经习惯了用vb和c来做这件事,我很惊讶这里这么复杂。我将为其他人发布我的最终代码,希望它能对其他人有所帮助。@shoretek太棒了!感谢您发布解决方案。祝你在使用PHP的过程中好运。这对我不起作用,我之前已经尝试过了,只是确认了一下。出于某种原因,我没有从另一个文件中提取变量。不确定要发布什么代码来显示我所指的内容,但将尝试:在名为config01.php的文件中,我声明$db\u host、$db\u name并分别将它们设置为localhost和usertable。从与config01文件位于同一文件夹的PDO文件中,我使用include'config01.php';。如果你需要更多,请告诉我。谢谢你的意见!
function validateuser($un, $em) {
    try {
        $db = new PDO(
            "mysql:host=localhost;dbname=db",
            'id',
            'pass',
            array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
        );
        $stmt = $db->prepare("SELECT ACCTTYPE FROM users WHERE LOGIN_ID=? or CONTACT_EMAIL=?;");
        $stmt->bindParam(1, $un, PDO::PARAM_STR, 15);
        $stmt->bindParam(2, $em, PDO::PARAM_STR, 150);
        $stmt->execute();
        $result = $stmt->fetch();
        return $result["ACCTTYPE"];
    } catch (exception $e) {
        echo $e;
    }
}