PHP代码只是在屏幕上打印,而不是运行

PHP代码只是在屏幕上打印,而不是运行,php,Php,由于某种原因,我无法连接到数据库。这是我的密码: <?php //only process form if $_POST isnt empty if ( ! empty( $_POST ) ) { // Connect to MySQL $mysqli = new mysqli( 'localhost', 'username', 'password', 'database' ); //Check connection if ( $mysqli->connect_er

由于某种原因,我无法连接到数据库。这是我的密码:

<?php

//only process form if $_POST isnt empty
if ( ! empty( $_POST ) ) {

// Connect to MySQL
$mysqli = new mysqli( 'localhost', 'username', 'password',       'database' );

//Check connection
if ( $mysqli->connect_error ) {
die( 'Connect Error: ' . $mysqli->connect_errno . ': ' . $mysqli-  >connect_error );
}   

//Insert form data
$sql = "INSERT INTO user ( Name, Username, Password, Email ) VALUES 
( '{mysqli->real_escape_string($_POST['Name'])}',
('{mysqli->real_escape_string($_POST['Lastname'])}',
('{mysqli->real_escape_string($_POST['Username'])}',
('{mysqli->real_escape_string($_POST['Password'])}' )
('{mysqli->real_escape_string($_POST['Email'])}' )";

//Print response from MySQL
if ( $insert ) {
echo "Success! Row ID: {$mysqli->insert_ID}";   



}else{  
die("Error: {$mysqli->errno} : {$mysqli->error}");
}

//Close our connection
$mysqli->close();
}

?>

应执行sql以返回结果$insert

示例:$insert=$mysqli->query$sql

而且,如前所述,使用事先准备好的语句更安全。

好吧,你写道

if ( $insert ) {
echo "Success! Row ID: {$mysqli->insert_ID}";   
它以字符串的形式准确地反映了后面引号之间的内容…

警告:您的代码易受攻击! 切勿在SQL插入中直接使用$\u POST[]或任何用户提交的数据

改用

关于屏幕上刚刚打印的代码: 如果PHP代码正在屏幕上打印,而不是由服务器解释;首先确保PHP文件使用的是有效的PHP扩展名,如.PHP,而不仅仅是.html

还要确保为您的web服务器安装了php模块,这与针对IIS和Apache的说明不同

此外,您的代码缺少使用以下代码完成的实际代码本身:

$insert = $mysqli->query($sql) // do the insert
然后,代码的其余部分将开始工作:

if ( $insert ) {
    echo "Success! Row ID: {$mysqli->insert_ID}";   
}else{  
    die("Error: {$mysqli->errno} : {$mysqli->error}");
}
$mysqli->close();
如果没有$mysqli->query$sql,那么您将点击else并死亡


有关详细信息,请参阅。

脚本将继续命中die语句,因为尚未设置$insert。所以你是对的:它只是打印到屏幕上

当你从互联网上复制和粘贴代码时,你忘记了一行——正如Philip指出的:

$insert = $mysqli->query($sql)
如果没有它,您的脚本所能做的唯一事情就是创建一个连接并再次关闭它——或者,最有可能的情况是:甚至无法关闭它,因为它会在到达该行之前死亡


您忘记的那一行应该在$sql字符串之后插入,但在使用$insert的条件语句之前插入。

为什么不在mysqli中使用prepared语句呢?当您说PHP代码只是在屏幕上打印而不是运行时,您的意思是浏览器会显示您的整个PHP文件吗?如果是这种情况,那么您的服务器上没有正确安装PHP。如果代码段中的密码是您的实际密码,您可能需要将其删除。另外,请澄清什么是PHP代码只是打印在屏幕上而不是运行;你指的是哪一个PHP代码?整个文件还是一行?Relax@tadman-我很确定,OP一旦能够理解它,就会使用正确的代码。这只是一个样本,不是吗第一次学会正确地做这件事是非常重要的。像这样的错误有一种进入生产的方式,一旦部署,您很可能会让您的服务器被黑客攻击,或者最终进入生产环境。这是一个太严重的问题,不能随便挥手。如果有一件事我很确定,那就是这需要经常说,因为如果从来没有提到过,很多人都不知道这对于面向公众的代码来说是绝对必要的。安全第一,就像学骑自行车一样。呼应成功!行ID:{$mysqli->insert_ID};与echo成功完全一样!行ID:.$mysqli->insert_ID;因此,这只是偏好的问题。第一个没有大括号也很好,因为它不是插值的-但是在使用数组下标表示法时需要它。