Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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
Javascript 使用准备好的语句从AJAX POST插入数据时出错_Javascript_Php_Mysql_Ajax_Facebook Graph Api - Fatal编程技术网

Javascript 使用准备好的语句从AJAX POST插入数据时出错

Javascript 使用准备好的语句从AJAX POST插入数据时出错,javascript,php,mysql,ajax,facebook-graph-api,Javascript,Php,Mysql,Ajax,Facebook Graph Api,我目前正在创建一个Facebook画布游戏,目前我有一个php脚本,可以将玩家数据(从AJAX帖子接收)插入我的数据库。这些数据通过Javascript函数从Facebook的Graph API中获取,然后通过AJAX发送到php脚本。现在一切都运行得很好,但对SQL注入来说并不安全 我想让我的SQL查询更安全,所以我一直在阅读准备好的语句、绑定参数/参数化语句和清理数据,但我发现这一切都有点混乱 我了解SQL注入是如何工作的,以及使用预先准备好的语句背后的想法,但在尝试插入AJAX接收到的数据

我目前正在创建一个Facebook画布游戏,目前我有一个php脚本,可以将玩家数据(从AJAX帖子接收)插入我的数据库。这些数据通过Javascript函数从Facebook的Graph API中获取,然后通过AJAX发送到php脚本。现在一切都运行得很好,但对SQL注入来说并不安全

我想让我的SQL查询更安全,所以我一直在阅读准备好的语句、绑定参数/参数化语句和清理数据,但我发现这一切都有点混乱

我了解SQL注入是如何工作的,以及使用预先准备好的语句背后的想法,但在尝试插入AJAX接收到的数据时,我很难实现它。这是我最近的一次尝试:

<?php 
session_start();
require_once 'facebook-php-sdk-v4-4.0-dev/autoload.php';

use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;

FacebookSession::setDefaultApplication('myappid', 'myappsecret');

$servername = "myservername";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO player (fb_id, f_name, l_name, email, gender) VALUES 
(?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $userid, $userfirst_name, $userlast_name, $useremail, $usergender);

// set parameters (these variables are received from AJAX) and execute
$userid = $_POST['userid'];
$userfirst_name = $_POST['userfirst_name'];
$userlast_name = $_POST['userlast_name'];
$useremail = $_POST['useremail'];
$usergender = $_POST['usergender'];
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

遗憾的是,当我尝试此操作时,没有任何内容插入到我的数据库中。Facebook数据肯定已经到达了php脚本(因为在我尝试实现这个准备好的语句之前它已经成功插入),所以问题可能出在“准备和绑定”部分

如果有人知道这里可能有什么问题,或者有任何其他的建议,让这更安全,我将不胜感激


提前谢谢

难道你不认为
$smt=…
$stmt->bind…
应该在
$usergender=$\u POST['usergender']之后出现吗
Hi@VarunNaharia谢谢你的回复,我已经试过了,但仍然不起作用。是否有可能某些代码被贬值?