使用 JQuery 将值插入 mySQL
Posted
技术标签:
【中文标题】使用 JQuery 将值插入 mySQL【英文标题】:Using JQuery To Insert Values Into mySQL 【发布时间】:2018-01-17 20:54:15 【问题描述】:我是 JQuery 的新手,正在做一个项目。这个项目不应该做任何事情,它更像是一个概念证明,所以我可以学习。到目前为止,我有 3 个 php 文件,一个名为“connection.php”的文件连接到我的本地 mysql DB。另一个,称为“save_score.php”,它将值保存到我的数据库中。最后,我有我的“test.php”文件,它创建了一些值并使用 JQuery 将它们发送到“save_score.php”以将它们插入到我的数据库中。
我遇到的问题是“connection.php”工作正常。我可以在 PHP 中硬编码 INSERT INTO 语句并将该查询发送到我的数据库以插入它。所以连接没有问题。我还通过两个 echo 语句测试了 JQuery 是否实际上将值发送到“save_score.php”,并且 echo 语句发回了我的测试值:“Jeff”和“10”。但是,mySQL INSERT 语句没有努力将值和查询发送到我的数据库。
所以本质上,我在 '$store' 中的语句应该可以解决问题,但事实并非如此,我也不知道为什么。
'save_score.php':
<?php
include 'connection.php';
$name = $_POST['name'];
$score = $_POST['score'];
echo $name;
echo $score;
$store = "INSERT INTO `galleryscores` (`player_name`, `player_score`) VALUES ($name, $score)";
$mysqli->query($store);
echo "done";
?>
'connection.php':
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "cs301";
// Create connection
$mysqli = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($mysqli->connect_error)
die("Connection failed: " . $mysqli->connect_error);
'test.php':
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script type="text/javascript">
var you = 's';
var you_score = 10;
$.post("save_score.php",
name: you,
score: you_score
)
.done(function(data)
alert("Data Loaded: " + data);
);
</script>
</head>
<body>
</body>
</html>
【问题讨论】:
在使用变量得出 SQL 仍在工作的结论后,您是否回显了$store
?
我刚刚做了,它给了我正确的查询:gyazo.com/a22aeb1dbe5e9cdfa5b16a88ecc9a6c2
SQL 出错,这就是它没有更新的原因,而且您没有看到它的错误处理。您需要用单引号引用您的字符串值(S)。一旦你有了固定的开始研究 mysqli 或 PDO 并准备好语句,因为你很容易受到攻击。
你的教授应该用mysqli
或PDO
教你Prepared Statements
@Matt 说你对SQL 注入持开放态度!!!
@cmorrissey 我自己学这门课,没有教授!所以你们是下一个最好的人!感谢您的帮助!
【参考方案1】:
尝试将您的插入查询更改为此
$store = "INSERT INTO `galleryscores` (`player_name`, `player_score`) VALUES ('".$name."', '".$score."')";
为了插入值,它们应该作为字符串传递给查询。最终,您将传递一个字符串以供执行。
已编辑 正如 Matt 所说,您应该始终尝试防止 SQL 注入。下面展示了如何做到这一点:
$query = $mysqli->prepare("INSERT INTO `galleryscores` (`player_name`, `player_score`) VALUES (?, ?)");
$query->bind_param("si", $name, $score);// 's' represents the corresponding variable type is String
$query->excecute();
bind_param documentation
【讨论】:
足以解决问题,但始终尝试引导用户将 Mysqli/PDO 用于准备好的语句。对 SQL 注入开放! @Matt 你是什么意思? @Matt 没问题。 @Casey.PhillipsTMC 如果这些值来自用户输入,比如联系我们表单,他们可能会写一些可能对您的数据库造成损害的内容 - 就删除表、给自己密码/访问权限而言到数据库等等等。给 SQL 注入一个谷歌,然后给 MySQLi 或 PDO 一个谷歌(尤其是准备好的语句)。无论变量来自何处,始终最好使用准备好的语句。更安全、更好的做法;) @Matt 确定!谢谢!我的问题是我实际上是通过我的应用程序开发课程自学,而不是实际上课。作为一名学生运动员有时很糟糕哈哈。感谢您的建议!【参考方案2】:这是使用PDO
的方法
$dbh = new PDO('mysql:dbname=cs301;host=localhost', $username, $password);
$stmt = $dbh->prepare('INSERT INTO `galleryscores` (`player_name`, `player_score`) VALUES (:player_name, :player_score)');
$stmt->execute( array('player_name' => $_POST['name'], 'player_score' => $_POST['score']) );
【讨论】:
【参考方案3】:当我们在做的时候。应该如何使用 MySQLi :D - 错误处理
$mysqli = new mysqli($host, $user, $pass, $db);
if($mysqli->connect_error)
die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
if ($stmt = $mysqli->prepare("INSERT INTO `galleryscores` (`player_name`, `player_score`) VALUES (?, ?)"))
// Bind the values in order to the ?'s or log error
// Assuming Name is a string and score is always an int
if(!$stmt->bind_param("si", $name, $score))
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
// Execute the completed sql command or log error
if (!$stmt->execute())
die('execute() failed: ' . htmlspecialchars($stmt->error));
$stmt->close(); // Close the database connection
else
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
【讨论】:
你是最棒的!我会回来看看这个以改进我的代码!以上是关于使用 JQuery 将值插入 mySQL的主要内容,如果未能解决你的问题,请参考以下文章
使用Codeigniter将jQuery datepicker + timepicker中的值插入MySQL datetime数据类型?