Php 为什么我的SQL查询失败了?
我测试了与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
$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];