为啥我会收到 500 错误? (MySQL php)
Posted
技术标签:
【中文标题】为啥我会收到 500 错误? (MySQL php)【英文标题】:Why do I get a 500 error? (MySQL php)为什么我会收到 500 错误? (MySQL php) 【发布时间】:2013-11-02 15:44:01 【问题描述】:<html>
<head>
HTML CODE
<?
$username="xxxxxx";
$password="xxxxxx";
$database="xxxxxx";
mysql_connect(localhost,$username,$password);
$escape = "INSERT INTO monster VALUES ('',$_POST["name"],$_POST["soort"])";
$escape2 = "DELETE monster FROM monster LEFT OUTER JOIN (
SELECT MIN( ID ) AS ID, NAME, PREF
FROM monster
GROUP BY NAME, PREF
) AS KeepRows ON monster.ID = KeepRows.ID
WHERE KeepRows.ID IS NULL";
$query=mysql_real_escape_string($escape);
$query2=mysql_real_escape_string($escape2);
@mysql_select_db($database) or die("MySQL error: Kan inte ansluta till databasen.");
mysql_close();
?>
</body>
</html>
每次我运行这个(从另一个文件,包含名称和排序的帖子)时,我都会收到 500 内部服务器错误。首先,我认为查询可能是问题所在,但它们甚至没有被执行。但是,我试图逃避查询。但还是报错。 这段代码有什么问题? (注意:$escape2 是我发现的一些代码,可以删除数据库中的重复项。但我真的不知道如何格式化它以便可以通过 php 使用它。)
【问题讨论】:
你到底想做什么?含糊不清……请描述一下 你的错误日志是怎么说的? 最新日志:[24-Oct-2013 07:15:44 Europe/Berlin] PHP Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or /Applications/MAMP/htdocs/monster.php 第 20 行中的编号 (T_NUM_STRING) 【参考方案1】:插入语句中的问题
应该是
$escape = "INSERT INTO monster VALUES ('',".$_POST['name'].",".$_POST['soort'].")";
在编写插入查询时最好写列名
如果列包含字符串值,如VARCHAR
或TEXT
,则使用quoted_printable_decode
如果列是自动递增的,则传递null
insert statment
$escape = "INSERT INTO monster (col1, col2, col3) VALUES (NULL,'".$_POST['name']."',".$_POST['soort'].")";
或
$escape = "INSERT INTO monster (col2, col3) VALUES ('".$_POST['name']."',".$_POST['soort'].")";
【讨论】:
我认为这行不通。您还没有引用变量。【参考方案2】:使用类似下面的...
$query = "INSERT INTO monster VALUES ('', '".$_POST["name"]."', '".$_POST["soort"]."')";
请不要在未转义的情况下插入值。
【讨论】:
【参考方案3】:看起来你需要这样的东西:
$query = "INSERT INTO monster VALUES ('', '".$_POST["name"]."', '".$_POST["soort"]."')";
另外我建议使用prepared statements,因为构建 查询的体验很糟糕。
【讨论】:
【参考方案4】:首先我有一个很酷的提议给你。你对一些高级 PHP 有什么看法?进入安全的 PHP + MySQL 应用程序的伟大世界又迈进了一步?
向您介绍PDO。 (我知道这不是您问题的答案,但您可以考虑)。查询的使用示例:
$db = new PDO('mysql:host=localhost;dbname='.$database, $username, $password);
$insertQuery = $db->prepare('INSERT INTO monster VALUES ("", :name, :soort)');
$deleteQuery = $db->prepare('DELETE monster FROM monster LEFT OUTER JOIN (
SELECT MIN( ID ) AS ID, NAME, PREF
FROM monster
GROUP BY NAME, PREF
) AS KeepRows ON monster.ID = KeepRows.ID
WHERE KeepRows.ID IS NULL');
//to execute query:
$deleteQuery->execute();
//or with params:
$insertQuery->execute(array(
':name' => $_POST['name'],
':soort' => $_POST['soort'],
));
很酷吧?还有更多......现在根据你的问题,它可能是一切(因为我们没有错误日志)但我的猜测是:
尝试使用<?php
而不是<?
$escape = "INSERT INTO monster VALUES ('',$_POST["name"],$_POST["soort"])";
编辑:
正如您提供的错误日志 - 现在我确定问题出在 $escape
查询中。这是因为您使用了$escape = "
$_POST["name"] 所以发生了“冲突”(如果我可以这么说的话)。
【讨论】:
【参考方案5】:试试这个:
Whenever you insert string type of values in the database using query it has to pass in the quote format. So you just need to change your insert query here.
$query = "INSERT INTO monster VALUES ('', '".$_POST["name"]."', '".$_POST["soort"]."')";
write query like this.
- 谢谢
【讨论】:
以上是关于为啥我会收到 500 错误? (MySQL php)的主要内容,如果未能解决你的问题,请参考以下文章