【问题标题】:Error in SQL syntax (quotes ???!!!)SQL 语法错误(引号???!!!)
【发布时间】:2016-07-26 11:35:16
【问题描述】:

有人可以帮我调试一下吗

<?php
$file_name = basename(__FILE__,'.php');
include("conf.php");
include("XMLSoccer.php");

$years = 1;    ///<-------NUMBER OF YEARS TO GO BACK
$leagueretrive = 3;   ///<--------THE LEAGUE ID TO RETRIEVE DATA FOR

$date1 = date('y', strtotime("-$years years"));
$date2 = date("y");
//CHECKING IF TABLE EXIST IF NOT CREATE NEW
$table = $file_name;
$query = "SELECT ID FROM " . $table;
$resultat = mysqli_query($conn,$query);


if(empty($resultat)) {
    echo "<p>" . $table . " table does not exist</p>";
    $query = mysqli_query($conn,"CREATE TABLE IF NOT EXISTS $file_name (
        Id int NOT NULL PRIMARY KEY,
        HomeGoalDetails varchar(800) NOT NULL,
    )CHARACTER SET utf8 COLLATE utf8_general_ci");
}
else {
    echo "<p>" . $table . "table exists</p>";
} // else

/////GETING THE DATA FROM SERVICE

try {
    $soccer = new XMLSoccer($api_key);
    $soccer->setServiceUrl("http://www.xmlsoccer.com/FootballDataDemo.asmx");
    $results = $soccer->GetHistoricMatchesByLeagueAndSeason(array("league"=>$leagueretrive,"seasonDateString"=>"$date1$date2"));
    print_r($results);
} catch (XMLSoccerException $e) {
    echo "XMLSoccerException: " . $e->getMessage();
}
foreach ($results->Match as $team) {
    $id = $team->Id;
    $homeGoalDetails = $team->HomeGoalDetails;

///INSERTING DATA INTO THE TABLE
    $sql = "INSERT INTO $file_name (HomeGoalDetails)
VALUES ('$homeGoalDetails')
on duplicate key update HomeGoalDetails='$homeGoalDetails'";
}
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
$conn->close();
?>

我得到的回应

错误:INSERT INTO testing2 (HomeGoalDetails) VALUES ('35': Stefan Johansen;4': 惩罚 Leigh Griffiths;') 重复密钥更新 HomeGoalDetails='35': Stefan Johansen;4': 点球 Leigh Griffiths;' 您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 附近': Stefan Johansen;4': 点球 Leigh Griffiths;') 重复 第 2 行的密钥更新 HomeGo' 进程以退出代码 0 结束

【问题讨论】:

  • 您的代码中的INSERT INTO testing2..... 查询在哪里?
  • 您的错误在于这一行:$sql = "INSERT INTO $file_name (HomeGoalDetails) VALUES ('$homeGoalDetails') on duplicate key update HomeGoalDetails='$homeGoalDetails'";
  • 这可能是准备好的语句如果你使用它们会为你解决的问题
  • 另外你定义了一个主键,但似乎没有插入一个主键,你确定你不是打算也让它AUTO_INCREMENT

标签: php mysql sql


【解决方案1】:

您的查询中有未转义的引号。

试试:

<?php
$file_name = basename(__FILE__,'.php');
include("conf.php");
include("XMLSoccer.php");

$years = 1;    ///<-------NUMBER OF YEARS TO GO BACK
$leagueretrive = 3;   ///<--------THE LEAGUE ID TO RETRIEVE DATA FOR

$date1 = date('y', strtotime("-$years years"));
$date2 = date("y");
//CHECKING IF TABLE EXIST IF NOT CREATE NEW
$table = $file_name;
$query = "SELECT ID FROM " . $table;
$resultat = mysqli_query($conn,$query);


if(empty($resultat)) {
    echo "<p>" . $table . " table does not exist</p>";
    $query = mysqli_query($conn,"CREATE TABLE IF NOT EXISTS $file_name (
        Id int NOT NULL PRIMARY KEY,
        HomeGoalDetails varchar(800) NOT NULL,
    )CHARACTER SET utf8 COLLATE utf8_general_ci");
}
else {
    echo "<p>" . $table . "table exists</p>";
} // else

/////GETING THE DATA FROM SERVICE

try {
    $soccer = new XMLSoccer($api_key);
    $soccer->setServiceUrl("http://www.xmlsoccer.com/FootballDataDemo.asmx");
    $results = $soccer->GetHistoricMatchesByLeagueAndSeason(array("league"=>$leagueretrive,"seasonDateString"=>"$date1$date2"));
    print_r($results);
} catch (XMLSoccerException $e) {
    echo "XMLSoccerException: " . $e->getMessage();
}
foreach ($results->Match as $team) {
    $id = $team->Id;
    $homeGoalDetails = $team->HomeGoalDetails;

///INSERTING DATA INTO THE TABLE
    $sql = "INSERT INTO $file_name (HomeGoalDetails)
VALUES ('".mysqli_real_escape_string($conn,$homeGoalDetails)."')
on duplicate key update HomeGoalDetails='".mysqli_real_escape_string($conn,$homeGoalDetails)."'";
}
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
$conn->close();
?>

【讨论】:

  • PHP 警告:mysqli_real_escape_string() 需要 2 个参数,1 个在 C:\111.php 第 44 行给出 PHP 警告:mysqli_real_escape_string() 需要 2 个参数,1 个在 C:\\111 .php 在第 45 行
  • 错误:INSERT INTO 111 (HomeGoalDetails) VALUES ('') on duplicate key update HomeGoalDetails=''
    您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1-API-PHP-master (1)\XMLSoccer 的重复键更新 HomeGoalDetails=''' 附近的 '111 (HomeGoalDetails) VALUES ('') 附近使用正确的语法-API-PHP-master\111.php 第 45 行
  • 我修复了mysqli_real_escape_string 中缺少的连接参数。这能解决问题吗?
  • 不,我现在明白了错误:插入到 111 (HomeGoalDetails) VALUES ('35\': Stefan Johansen;4\': 罚球 Leigh Griffiths;') 重复键更新 HomeGoalDetails='35\ ': Stefan Johansen;4\': 惩罚 Leigh Griffiths;'
    您的 SQL 语法有误;检查与您的 MariaDB 服务器版本相对应的手册,以在 '111 (HomeGoalDetails) VALUES ('35\': Stefan Johansen;4\': 惩罚 Leigh Griffit' 在第 1 行附近使用正确的语法 进程以退出代码 0
猜你喜欢
  • 1970-01-01
  • 2019-01-03
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2021-05-06
  • 2018-05-27
  • 1970-01-01
相关资源
最近更新 更多