为什么这个简单的"INSERT INTO"查询不起作用

Mad*_*ann 1 php mysql sql mysqli sql-insert

我正在为您通过表单注册的学校项目创建一个简单的注册和登录系统.

这是我的注册过程代码(没有一堆测试确定字段是否为空等),这只是查询部分.

对于包含丹麦标志(ÆØÅ)和丹麦语的变量感到抱歉,但我做了几个测试,如果我使用æøå或其他类型的字母无关紧要.

我根本无法理解为什么这一小段代码不起作用:

//I retrieve alot of variables from a form

 $Fornavn = mysql_real_escape_string($_POST["Fornavn"]); 
 $Efternavn = mysql_real_escape_string($_POST["Efternavn"]); 
 $Koen = mysql_real_escape_string($_POST["Koen"]); 
 $Etnicitet = mysql_real_escape_string($_POST["Etnicitet"]); 
 $Brugernavn = mysql_real_escape_string($_POST["Brugernavn"]);
 $Password = mysql_real_escape_string($_POST["Password"]);
 $Mail = mysql_real_escape_string($_POST["Mail"]);
 $Haarfarve = mysql_real_escape_string($_POST["Haarfarve"]);
 $Oejenfarve = mysql_real_escape_string($_POST["Oejenfarve"]);
 $Vaegt = mysql_real_escape_string($_POST["Vaegt"]);
 $Hoejde = mysql_real_escape_string($_POST["Hoejde"]);

     //The query 

 mysqli_query($con, "INSERT INTO bruger (Fornavn, Efternavn, Køn, Etnicitet, Brugernavn, Password, Mail, Hårfarve, Øjenfarve, Vaegt, Højde)
VALUES ('$Fornavn', '$Efternavn', '$Koen', '$Etnicitet', '$Brugernavn', '$Password',     '$Mail', '$Haarfarve', '$Oejenfarve', '$Vaegt', '$Hoejde')");
echo $Fornavn;
Run Code Online (Sandbox Code Playgroud)

编辑:我知道它不起作用,因为我运行代码后,我的mysql数据库中没有任何内容.它只返回零行(我使用phpmyadmin顺便说一句.)我真的没有得到任何错误消息或任何东西.

正如所建议的那样,我试图将Mysqli_*用于我的变量:

 //I retrieve alot of variables from a form
 $Fornavn = mysqli_real_escape_string($con,$_POST["Fornavn"]); 
 $Efternavn = mysqli_real_escape_string($con,$_POST["Efternavn"]); 
 $Koen = mysqli_real_escape_string($con,$_POST["Koen"]); 
 $Etnicitet = mysqli_real_escape_string($con,$_POST["Etnicitet"]); 
 $Brugernavn = mysqli_real_escape_string($con,$_POST["Brugernavn"]);
 $Password = mysqli_real_escape_string($con,$_POST["Password"]);
 $Mail = mysqli_real_escape_string($con,$_POST["Mail"]);
 $Haarfarve = mysqli_real_escape_string($con,$_POST["Haarfarve"]);
 $Oejenfarve = mysqli_real_escape_string($con,$_POST["Oejenfarve"]);
 $Vaegt = mysqli_real_escape_string($con,$_POST["Vaegt"]);
 $Hoejde = mysqli_real_escape_string($con,$_POST["Hoejde"]);

 //The query
   mysqli_query($con, "INSERT INTO bruger (Fornavn, Efternavn, Køn, Etnicitet, Brugernavn,   Password, Mail, Hårfarve, Øjenfarve, Vaegt, Højde)
   VALUES ('$Fornavn', '$Efternavn', '$Koen', '$Etnicitet', '$Brugernavn', '$Password',    '$Mail', '$Haarfarve', '$Oejenfarve', '$Vaegt', '$Hoejde')");
   echo $Fornavn;
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

所有内容都在数据库中存储为"Varchar",其中包含排序规则"utf8_danish_ci".

回答评论:

@John @Jayaram我没有检索到任何错误信息,或者我不知道他们去哪里了?我是Mysql和PHP的新手.

@Adunahay Vaegt和Højde在表格中存储为Varchar.

@Gordon连接的代码如下:

//We check the connection 
$con = mysqli_connect("localhost","Mads","","meat-market");
//If there is a fail. 
if (mysqli_connect_errno()) 
    { 
    echo "<h1> Det er vores fejl:</h1><br /><h2>Kunne ikke forbinde til Databasen:</h2><br /> " . mysqli_connect_error();
    exit;
    }
Run Code Online (Sandbox Code Playgroud)

确保表存在,数据库确实存在,因为我可以在Phpmyadmin中看到它.用户Mads还拥有所有必要的权限.

@Raphaël我不知道你是否可以使用特殊的字符,但我在尝试使用特殊字符之前做了几次测试,它似乎工作正常.

@dboals我不知道你的意思(我是php的新手),欢迎进一步的解释.

Fun*_*ner 10

这是因为您使用的mysql_*是POST变量和mysqli_*数据库连接以及查询中使用$con的第一个变量,即mysqli_*语法.

更改:

$Fornavn = mysql_real_escape_string($_POST["Fornavn"]); 
Run Code Online (Sandbox Code Playgroud)

$Fornavn = mysqli_real_escape_string($con,$_POST["Fornavn"]);
Run Code Online (Sandbox Code Playgroud)

并为其他人做同样的事情.

旁注:将所有mysqli_*函数专门用于整个代码 - mysqli_*并且mysql_*函数不会混合在一起..(我建议您使用并使用预处理语句PDO)

  • mysqli_可在此处找到准备和装订的示例.