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


PHP code just prints on screen instead of running

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

<?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 注入的影响!

切勿直接在SQL Insert中使用$_POST[]或任何用户提交的数据

请改用预准备语句!

<小时 />

关于代码只是打印在屏幕上:

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

还要确保为您的 Web 服务器安装了 php 模块(对于 IIS 和 Apache 来说,这将是不同的说明)。

<小时 />

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

$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),你就会撞到elsedie()

有关详细信息,请参阅query

应该执行 sql 以返回结果$insert

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

(而且,如前所述,使用预准备语句要安全得多。

好吧,你写的

if ( $insert ) {
echo "Success! Row ID: {$mysqli->insert_ID}";   

这与后续引号(作为字符串)之间的内容完全一致......

脚本

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

当您从"互联网"复制并粘贴代码时,您忘记了一行 - 正如菲利普指出的那样:

$insert = $mysqli->query($sql)

没有它,您的脚本唯一要做的就是创建一个连接并再次关闭它 - 或者,最有可能的是:甚至无法关闭它,因为它会在到达该行之前死亡。 :)

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