0

我开始学习 PHP + AJAX + SQL。我似乎无法破解我遇到的语法问题。我在我的网络中的服务器上运行最新的 WAMP 版本作为测试环境。

我的 INDEX.PHP 中有以下脚本(来自W3Schools.com):

<script>
$(document).ready(function() {
    $('#submit').click(function() {
        str = document.getElementById("cn").value;

        if (str=="")
          {
          document.getElementById("txtHint").innerHTML="No name typed, returning all rows ";
          str="all";
          }; 
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          };
        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
            }
          };

        xmlhttp.open("GET","getcustomer.php?q="+str,true);
        xmlhttp.send();
    });
});
</script>

然后我有一个名为 GETCUSTOMER.PHP 的服务器端脚本,其中包含(部分)以下内容:

<?php
$q = $_GET['q'];

echo "The variable contains = ".$q;   **<--- this shows me on the browser the correct variable value is passed to the server side script**

$con = mysqli_connect('localhost','phpuser','abc123','learnphp');
if (!$con)
  {
  die('Could not connect: ' . mysqli_error($con));
  };

mysqli_select_db($con,"PHP_AJAX_Demo");
if ($q == "all") {
    $sql="SELECT * FROM customers";
} else {
    $sql="SELECT * FROM customers WHERE 'Company' = '" . $q . "'";
};

$result = mysqli_query($con,$sql);

当我的主表单提交 COMPANY 的“空白”值时,它可以正常工作,因为“str=all”被执行并将 CUSTOMERS 表中的所有行返回给浏览器。当我使用一个值(存在于表中)提交它时,我没有返回任何行。我也没有收到任何错误。

语法来自 W3,它适用于他们的演示。我错过了什么?提前致谢!

4

1 回答 1

0

当单引号用于指示字符串值的开头和结尾时,您在列名周围加上单引号。改用反引号。改变:

$sql="SELECT * FROM customers WHERE 'Company' = '" . $q . "'";

$sql="SELECT * FROM `customers` WHERE `Company` = '" . $q . "'";

请注意,此脚本对SQL 注入开放,您应该使用准备好的语句

于 2013-11-02T07:59:24.580 回答