也许它的 Mysql 语法错误?

Maybe its Mysql syntax error?

你好,我不知道我的错误在这里是否清楚如果我打开我的网站,我会在左侧床Sql语法这里是我的代码

  <?php

$dbuser="root";
$dbpass="";
$dbname="l2jgs";  //the name of the database
$chandle = mysqli_connect("localhost", $dbuser, $dbpass) 
    or die("Connection Failure to Database");
mysqli_select_db($chandle, "l2jgs");
$sql="insert characters.char_name,characters.pvpkills,char_templates.ClassName,characters.online from characters,char_templates where characters.classid=char_templates.Classid order by characters.pvpkills DESC LIMIT "."NumberOfResults";
echo"<html><head></head><body bgcolor='#000000' style='color:rgb(200,200,200)'>";
echo "<table  border='2' align=center width=500>";
echo "<tr><th>Nr.</th><th>Name</th><th>Pvp Kills</th><th>Main class</th><th>Status</th></tr>\n";
$nr=1;
if ($result=mysqli_query($chandle,$sql)or die("Bed Sql syntax")) {
  while ($row=mysql_fetch_row($result)) {
     echo "<tr><td align=center>".$nr."</td>";
     $nr++;
   echo "<td align=center>".$row[0]."</td>";
   echo "<td align=center>".$row[1]."</td>";
        echo "<td align=center>".$row[2]."</td>";
        if($row[3])
{echo "<td align=center style='color:rgb(0,255,0)'>Online</td></tr>\n"; }
  else{echo "<td align=center style='color:rgb(255,0,0)'>Offline</td></tr>\n";}
  }
} else {
  echo "<!-- SQL Error ".mysql_error()." -->";
}
echo "</table></body></html>";


?>

抱歉,如果它已经出现,但我没有看到任何符合我的问题的 post 谢谢大家:)

你的 SQL 声明让我不满意:

INSERT characters.char_name, 
         characters.pvpkills, 
         char_templates.classname, 
         characters.online 
FROM     characters, 
         char_templates 
WHERE    characters.classid=char_templates.classid 
ORDER BY characters.pvpkills DESC limit numberofresults

通常这将是 INSERT FIELDS INTO TABLE WHERE CRITERIA,您不必担心插入时的 ORDER BY,就在您查询数据时。也许:

INSERT characters.char_name, 
         characters.pvpkills, 
         char_templates.classname, 
         characters.online 
INTO     characters, 
         char_templates 
WHERE    characters.classid=char_templates.classid 

或:

SELECT characters.char_name, 
         characters.pvpkills, 
         char_templates.classname, 
         characters.online 
FROM   characters, 
         char_templates 
WHERE    characters.classid=char_templates.classid 
ORDER BY characters.pvpkills
DESC LIMIT 100

这是你的sql(有问题):

insert  
    characters.char_name,  
    characters.pvpkills,  
    char_templates.ClassName,  
    characters.online  
from  
    characters,  
    char_templates  
where  
    characters.classid = char_templates.Classid  
order by  
    characters.pvpkills  
DESC LIMIT NumberOfResults;  

1) 你想要 select 而不是 insert.
2) NumberOfResults 必须是数字,不能是字符串。我没有看到名称为 'NumberOfResults' 的变量,所以也许您只是想让它成为一个特定值,也许是 100?
3) 最好为您的 table 使用别名,而不是完整的 table 名称。
4) 使用 php 多行字符串,这样更容易阅读 sql 查询。

修复版本,准备复制粘贴:

$sql = <<< SQL  
    SELECT  
        char.char_name,  
        char.pvpkills,  
        ct.ClassName,  
        char.online  
    FROM  
        characters char,  
        char_templates ct  
    WHERE  
        char.classid = ct.Classid  
    ORDER BY  
        char.pvpkills DESC  
    LIMIT 100;  
SQL;  

您的查询语法不正确。

看到查询下方的回声,您想使用 SELECT 而不是 INSERT

$sql="SELECT characters.char_name,characters.pvpkills,
      char_templates.ClassName,characters.online 
FROM characters,char_templates 
WHERE characters.classid=char_templates.Classid 
ORDER BY characters.pvpkills 
DESC LIMIT "."NumberOfResults"; // <= unclear

旁注: NumberOfResults 不正确,被视为 constant。使用错误报告后,会触发 Undefined constant NumberOfResults 通知。那应该是一个数字或一个预定义的变量。您可能打算使用 $NumberOfResults 并在查询之前定义,例如 $NumberOfResults = 10;

请参阅 SELECT 的手册:

和 INSERT 手册:

使用 or die(mysqli_error($chandle))mysqli_query() 而不是
or die("Bed Sql syntax") 会发出关于查询失败原因的真正错误。


error reporting 添加到您的文件的顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只应在试运行中进行,绝不能在生产中进行。