gpt4 book ai didi

php - PDO 绑定(bind)列语句

转载 作者:行者123 更新时间:2023-11-29 13:09:39 24 4
gpt4 key购买 nike

我正在为我的网站编写注册代码,但在执行 PDO::bindcolumn 部分时被阻止。这是我编写的代码:

这是我的register.php

<fieldset id="registrarse"> <form method="post" action="register2.php">
<label>Nombre: </label>
<input type="text" name="username" placeholder="Nombre de usuario"><br>
<label>Password:</label>
<input type="password" name="password" placeholder="Password"><br>
<label>Correo electrónico:</label>
<input type="email" name="mail" placeholder="Correo electrónico"><br>
<label>Género:</label>
<input type="radio" name="sex" value="Hombre">Hombre
<input type="radio" name="sex" value="Mujer">Mujer<br>
<p id="letra">Esto es para asociar un diseño masculino o femenino</p>
<input type="submit" value="¡Regístrate!">
<input type="reset" value="Resetear campos"> </form> </fieldset>

这是我的register2.php:

<?php
$user = 'root';
$pass = 'root';
$db = new PDO('dblib:host=localhost;dbname=crespo;charset=UTF-8', $user, $pass);
$stmt = $db->prepare("INSERT into users (username, password, mail, sex) VALUES (:username, :password, :mail, :sex)");
$stmt->execute(array(':username'=>$_POST['username'],
':password'=>$_POST['password'],
':mail'=>$_POST['mail'],
':sex'=>$_POST['sex']));
?>

现在我被困住了,我不知道该怎么办。我一直在遵循 php.net 官方 PDO 手册中的示例,但我不知道下一步该怎么做。我认为它类似于 $stmt->bindColumn(1, $type, PDO::PARAM_STR, 256); 那么,我现在该怎么办?

谢谢。

最佳答案

一切看起来都很好,所以如果您的行没有被插入,那么可能会发生某种错误,但由于您没有打开任何类型的错误报告,您将永远不会看到它。处理 PDO 时,您应该在三个地方查找错误:

数字 1:

在调试期间将以下内容放在任何 PHP 脚本的顶部以查看所有错误:

error_reporting(-1);
ini_set('display_errors', 1);

数字2:

PDO 连接时可能会失败。你需要处理这个:

try {
$db = new PDO('dblib:host=localhost;dbname=crespo;charset=UTF-8', $user, $pass);
} catch (PDOException $e) {
echo 'Connection failed';
}

数字3:

默认情况下,PDO handles errors silently这意味着脚本将继续执行,但您不会看到任何错误。要让错误显示出来,您需要设置错误模式。您可以通过将其作为参数传递给 constructor 来完成此操作。或者在建立连接后,如下所示:

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

正如我上面提到的,使用准备好的语句可以防止 SQL 注入(inject)。它不能阻止您以纯文本形式不安全地存储密码,这是一个非常糟糕的主意。 Hash them .

编辑:

由于您遇到连接问题,因此您使用的登录凭据无效。对于 MySQL,DSN 应如下所示:

'mysql:host=localhost;dbname=test'

注意开头的mysqldblib 用于 Sybase 数据库。我会尝试将 dblib 更改为 mysql ,看看是否可以解决您的问题。如果没有,请在您的 catch block 中,回显 $e->getMessage() 以显示服务器实际所说的内容。连接后只需将其删除,因为它可能会泄露您的登录凭据。

关于php - PDO 绑定(bind)列语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22262861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com