Php 为什么我的SQL查询失败了?

Php 为什么我的SQL查询失败了?,php,sql,Php,Sql,我测试了与SQL的连接,它连接正确。但是由于某种原因,我的查询返回了错误。繁荣消息,但它们不起作用。知道发生了什么吗 $query = "INSERT INTO `members` (`id`,`fname`,`lname`,`password`,`email`,`vatid`,`transfer`, `link`, `ip`) SELECT `id`,`fname`,`lname`,`password`,`email`,`vatid`,`transfer`, `link`, `ip` F

我测试了与SQL的连接,它连接正确。但是由于某种原因,我的查询返回了错误。繁荣消息,但它们不起作用。知道发生了什么吗

$query = "INSERT INTO `members` 
(`id`,`fname`,`lname`,`password`,`email`,`vatid`,`transfer`, `link`, `ip`) 
SELECT `id`,`fname`,`lname`,`password`,`email`,`vatid`,`transfer`, `link`, `ip` 
FROM applicants WHERE id=$_GET[id]";

if ( !mysqli_query($connection,$query) ){
   // 
   //die (mysql_error());
   print("Error. BOOM!");
} else {
   //Or on success:
   print ("Thank you for your registration");
   //or you can do redirect to some page, like this:

  //header('location: /thanks.php');
}

$query = "DELETE * FROM applicants WHERE id=$_GET[id]";

if ( !mysqli_query($connection,$query) ){
   // 
   //die (mysql_error());
   print("Error. BOOM!");
} else {
   //Or on success:
   print ("Thank you for your registration");
   //or you can do redirect to some page, like this:

  //header('location: /thanks.php');
}

首先,您有一个SQL注入问题。在将变量放入查询之前,请始终对其进行转义

使用此选项可检查错误并获得有关发生情况的更好信息:

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
第二个查询也有输入错误,请改用此选项:

$query = "DELETE * FROM applicants WHERE id=$_GET['id']";
首先是先决条件,请切换到参数化查询。我不是PHP爱好者,但在我看来,$\u GET[id]只是一个请求参数

INSERT INTO `members` (
    `id`
    ,`fname`
    ,`lname`
    ,`password`
    ,`email`
    ,`vatid`
    ,`transfer`
    ,`link`
    ,`ip`
    )
SELECT `id`
    ,`fname`
    ,`lname`
    ,`password`
    ,`email`
    ,`vatid`
    ,`transfer`
    ,`link`
    ,`ip`
FROM applicants
WHERE id = ?
我的第一个猜测是,members中的id是一个生成的列;我不知道您正在使用什么RDBMS,但您可能必须让引擎决定新成员的id

error_reporting(E_ALL);

$query = "INSERT INTO `members` (`id`,`fname`,`lname`,`password`,`email`,`vatid`,`transfer`, `link`, `ip`) SELECT `id`,`fname`,`lname`,`password`,`email`,`vatid`,`transfer`, `link`, `ip` FROM applicants WHERE id=".$_GET['id']."";

if ( !mysqli_query($connection,$query) ){
   // 
 //die (mysql_error());
 print("Error. BOOM!");
} else {
   //Or on success:
   print ("Thank you for your registration");
   //or you can do redirect to some page, like this:

  //header('location: /thanks.php');
}

$query = "DELETE FROM applicants WHERE id=".$_GET['id']."";

if ( !mysqli_query($connection,$query) ){
   // 
   //die (mysql_error());
   print("Error. BOOM!");
} else {
   //Or on success:
   print ("Thank you for your registration");
   //or you can do redirect to some page, like this:

  //header('location: /thanks.php');
}
或者,您可以在数据库中的sql选项卡的phpmyadmin中测试查询

或者在php文件中放入:

error_reporting(E_ALL);

您可以在删除查询中尝试此格式以确定错误:

<?php
$sql = " 
    DELETE FROM 
        applicants
    WHERE 
        id = ".mysql_real_escape_string($_GET[id])."
";

if(!$res = mysql_query($sql)) 
{ 
    trigger_error(mysql_error().'<br />In query: '.$sql); 
} 
elseif(mysql_affected_rows() == 0) 
{ 
    echo 'No records Deleted. <br />Query: '.$sql; 
} 
else 
{ 
    echo 'There are '.mysql_affected_rows().' records deleted.'; 
}
?>
这:

不是有效的sql。你必须去掉星号

DELETE FROM applicants WHERE id=$_GET[id];

在其他使调试变得困难的因素中,如果任何一个查询失败,您都会给出相同的输出。

您是否尝试过检查mysqli\u错误?它告诉你什么了?你有关于使用mysql\u错误的评论,但是当你使用mysqli\u*时,这可能不会提供太多信息,否则。我希望$connection在英国的某个地方初始化,当MP介入时,事情会出错@JonathanLonowski我在对一些答案的评论中这样做了。应该是$_GET['id']而不是$_GET[id]是的,我只是忘了。我回答得很快,所以我只是犯了一个错误。我不太担心我所做的注射,但你是对的,允许注射是非常糟糕的,而且很容易修复。我采纳了您的建议,并使用mysqli_error来确定问题所在。它说您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“*FROM applications WHERE id=1”附近使用$query=DELETE*FROM applications WHERE id=$\u GET[id];”的正确语法$_GET[id]应该是$\u GET['id']谢谢。我最终使用mysqli_error来查找问题。它说您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行代码$query=DELETE*FROM applicators,其中id=$\u GET[id];,的“*FROM applicators,其中id=1”附近使用的正确语法;。不要在删除查询中使用*。
DELETE FROM applicants WHERE id=$_GET[id];