来自数据库管理员Stack Exchange的
This question was migrated,因为可以在Stack Overflow上进行回答。
Migrated 5天前。
在Visual Studio Code中,我正在创建一个网站。我拥有的HTML页面具有获取用户数据的形式:
然后将其发送到名为Data.php的php文件:
我不知道如何在vs代码中查看php echo或mysql错误。我正在使用基本的html项目,并且它们未出现在调试控制台中。如果需要,我可以发送数据库的外观。
编辑:
具有PDO的新PHP代码,仍然无法正常工作:
编辑2:
我得到了要运行的php文件。我不得不弄乱一些奇怪的Visual Studio代码,而且显然找不到我的
但是现在我得到了错误:
我的php文件“未找到驱动程序”,所以我现在必须调查一下。
我没有对上面的
对于最后一个问题,我需要取消注释
确实应该是:
Migrated 5天前。
在Visual Studio Code中,我正在创建一个网站。我拥有的HTML页面具有获取用户数据的形式:
<form action="Data.php" style="position: fixed; top: 60px; left: 5px;" method="POST">
<fieldset>
<legend>Create Account</legend>
Username: <br>
<input type="text" name="username">
<br>
Email:<br>
<input type="text" name="email">
<br>
Password:<br>
<input type="text" name="password">
<br><br>
<input type="submit" name ="Submit" value="Create">
</fieldset>
</form>
然后将其发送到名为Data.php的php文件:
<?php
if(isset($_POST['Submit'])){
$host = "localhost:3306";
$username = "Arthos";
$password = "Pancake101!";
$database = "userinfo";
$user = $_POST['username'];
$email = $_POST['email'];
$pass = $_POST['password'];
$connect = mysqli_connect($host, $username, $password, $database);
$query = "INSERT INTO 'users'('username', 'email', 'password') VALUES ("'.$user.'", "'.$email.'", "'.$pass.'")";
$result = mysqli_query($connect,$query);
mysqli_close($connect);
}
?>
我不知道如何在vs代码中查看php echo或mysql错误。我正在使用基本的html项目,并且它们未出现在调试控制台中。如果需要,我可以发送数据库的外观。
编辑:
具有PDO的新PHP代码,仍然无法正常工作:
<?php
echo "Made it!";
$dsn = "mysql:host=localhost;dbname=userinfo;charset=utf8mb4";
$options = [
PDO::ATTR_EMULATE_PREPARES => false, // turn off emulation mode for "real" prepared statements
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //turn on errors in the form of exceptions
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, //make the default fetch be an associative array
];
try {
$pdo = new PDO($dsn, "username", "password", $options);
$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->execute([$_POST['username'], $_POST['email'], $_POST['password']]);
$stmt = null;
} catch (Exception $e) {
error_log($e->getMessage());
exit('Something weird happened'); //something a user can understand
}
?>
编辑2:
我得到了要运行的php文件。我不得不弄乱一些奇怪的Visual Studio代码,而且显然找不到我的
php.exe
文件,所以现在可以正常工作了。但是现在我得到了错误:
我的php文件“未找到驱动程序”,所以我现在必须调查一下。
我没有对上面的
Data.php
副本中可以看到的代码进行任何更改。对于最后一个问题,我需要取消注释
php.ini
中的一行。如果您有此问题,请进入php.ini
文件,对其进行编辑,以在之前消除分号:; extension=pdo_mysql
确实应该是:
extension=pdo_mysql
最佳答案
好 ..
表名和列名不属于单引号,因为mysql用于标记字符串数据和类似名称(如datetime)。您应该使用backticks
来封装表名和列名。
表`tableName` ....
请仔细阅读sql-injection-您手动构建查询字符串的方法会引发sql-injection(在您的情况下,没有让恶意用户在密码字段中键入SQL命令的方式……他只是键入“' );删除表用户;-“(不带双引号),并且您的数据库以..为例中断。https://www.w3schools.com/sql/sql_injection.asp
明文密码...请使用完善的哈希方法,如sha-256
您可能想使用mysqli提供的准备好的(sql-)语句..但我建议您花些时间学习PDO
除了您的调试问题以外,Visual Studio不仅提供调试..,还提供输出视图...您应该可以在其中看到echo / var_dump ...
如果您的数据库操作失败,则还应该在PHP中使用try-catch异常处理-从创建数据库连接(如果db-server关闭时可能会失败)开始,直到由于语法错误(如您的情况)而导致查询失败。 。如果那确实是您使用过的代码,则由于提到的提示1而中断,如果您要指出表和列的名称..请使用`(反引号)