使用 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 并准备好语句,因为你很容易受到攻击。 你的教授应该用mysqliPDO 教你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数据类型?

如何使用java变量将值插入mysql表?

使用mysql连接器python将值插入数据库,网络抓取

如果值不存在,将值插入 MySQL 表?

在 python2.7 中使用 pool.apply_async 不将值插入 MySQL 表

mysql将值插入表中?