Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 脚本在浏览器中工作,但在API请求时不工作_Php_Mysql_Apache_Api_Get - Fatal编程技术网

Php 脚本在浏览器中工作,但在API请求时不工作

Php 脚本在浏览器中工作,但在API请求时不工作,php,mysql,apache,api,get,Php,Mysql,Apache,Api,Get,我有以下脚本: <?php require_once("config/db.php"); mysql_query("INSERT INTO SMS (receiver, sender, message, date, reference) VALUES ('".$_GET['receiver']."', '".$_GET['sender']."', '".$_GET['message']."', '".$_GET['date']."', '".$_GET['reference']."')"

我有以下脚本:

<?php
require_once("config/db.php");

mysql_query("INSERT INTO SMS
(receiver, sender, message, date, reference)
VALUES
('".$_GET['receiver']."', '".$_GET['sender']."', '".$_GET['message']."', '".$_GET['date']."', '".$_GET['reference']."')")
or die(mysql_error());

?>

我不知道发生了什么事。对此有何想法?

因此,请尝试转义您的参数,我怀疑您要插入的消息包含
,甚至知道您正在对其进行编辑

<?php
require_once("config/db.php");

mysql_query("INSERT INTO SMS (receiver, sender, message, date, reference)
                VALUES('".mysql_real_escape_string($_GET['receiver'])."', 
                        '".mysql_real_escape_string($_GET['sender'])."', 
                        '".mysql_real_escape_string($_GET['message'])."', 
                        '".mysql_real_escape_string($_GET['date'])."', 
                        '".mysql_real_escape_string($_GET['reference'])."')") 
            or die(mysql_error());
?>

问题是在页面上执行的IP检查。我的IP是白名单,API的IP不是。愚蠢的错误


感谢您提供的所有答案和改进代码的方法。

是的,api使用GET达到了终点,您是否也可以检查错误日志,看看是否有问题,并且您在api中使用了/import.php,而不是尝试给出完整路径,即
GEThttp://yourdomain.com/import.php?....
SQL如果在
$\u GET['message']
中有一个
'
,则按原样转义您的参数!!!强制性建议。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,非常感谢您的回答。稍后我将查看MySQLi和PDO。但是,目前,脚本正在运行(在我的浏览器中)。当我从浏览器中的Apache访问日志(如上所示)复制请求时,它会将信息添加到数据库中。此外,正如您在日志中看到的,GET请求中没有类似“的字符”。问题是当API请求页面时什么都没有发生。这很奇怪,因为这很可能是问题所在,您是否使用curl来获取API?它返回什么,如果插入查询有问题,那么它将返回mysql_error(),并且您是否有任何SQL限制或为列设置数据类型,例如它们都是varchar()。同时检查error.log以获取线索。
<?php
require_once("config/db.php");

mysql_query("INSERT INTO SMS (receiver, sender, message, date, reference)
                VALUES('".mysql_real_escape_string($_GET['receiver'])."', 
                        '".mysql_real_escape_string($_GET['sender'])."', 
                        '".mysql_real_escape_string($_GET['message'])."', 
                        '".mysql_real_escape_string($_GET['date'])."', 
                        '".mysql_real_escape_string($_GET['reference'])."')") 
            or die(mysql_error());
?>
<?php 
$host = "127.0.0.1";
$dbname = "da_database";
$user = "username";
$pass = "password";

try {
    $pdo = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass, array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
    );

} catch(PDOException $e) {
    //you could mail() this
    die('<pre>'.$e->getMessage().'</pre>');
}

try{
    $sql = $pdo->prepare("
    INSERT INTO SMS (receiver, sender, message, date, reference)
                VALUES(?, ?, ?, ?, ?)");

    $sql->bindValue(1, $_GET['receiver']);
    $sql->bindValue(2, $_GET['sender']);
    $sql->bindValue(3, $_GET['message']);
    $sql->bindValue(4, $_GET['date']);
    $sql->bindValue(5, $_GET['reference']);

    $sql->execute();
} catch(PDOException $e){
    //you could mail() this
    die('<pre>'.$e->getMessage().'</pre>');
}
?>