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

时间:2014-03-31 20:11:13

标签: 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;

编辑: 我知道它不起作用,因为我运行代码后,我的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;

但它不起作用。

所有内容都在数据库中以“utf8_danish_ci”存储为“Varchar”。

回答评论:

@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;
    }

尽管我可以在Phpmyadmin中看到它,但我确保该表存在且数据库已存在。用户Mads还拥有所有必要的权限。

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

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

2 个答案:

答案 0 :(得分:10)

这是因为您使用mysql_*作为POST变量,使用mysqli_*作为数据库连接,使用$con作为第一个变量使用mysqli_*$Fornavn = mysql_real_escape_string($_POST["Fornavn"]); 语法。

变化:

$Fornavn = mysqli_real_escape_string($con,$_POST["Fornavn"]);

mysqli_*

并为其他人做同样的事。

旁注:专门为您的整个代码使用所有mysqli_*函数--- mysql_*mysqli_函数不会混合在一起..(我建议您使用{{3} }},或prepared statements

  • 可以找到{{1}}的准备和绑定示例PDO

答案 1 :(得分:1)

我发现了什么问题。 首先,我需要在我的变量中将mysql_ *更改为mysqli_ *。

但在那之后它仍然没有用。

然后我试图将字母“æøå”改为数据库中没有特殊字母的字样。

在变量名称中似乎并不重要。

所以相反:

  • Æ= AE
  • Ø= OE
  • Å= AA

所以显然特殊字符是不行的,尽管它似乎有点不一致,因为我之前用特殊字符做过...我不知道它是否依赖于数据库的整理... < / p>

但是感谢所有人!

编辑!:

我在表格和所有行中使用了UTF8_Danish_ci排序规则。

但在此之后我还有问题,如果我在表单中输入一个特殊字符,它将显示为A |或类似数据库中的类似内容。

我通过对来自表单的每个变量执行以下操作来解决此问题:

 $Fornavn =utf8_decode($_POST["Fornavn"]);
 $Fornavn = mysqli_real_escape_string($con,$Fornavn); 

并将以下参数添加到我的FORM标记:

accept-charset="UTF-8"

仍然无法执行mysqli查询,其中行名称包含ÆØ或Å。