-1

在这段代码中,我试图搜索一个包含两列的数据库,根据其中一个匹配项检索其中的 11 对(公司名称;这是使用 POST 从 JavaScript 发送的)。然后我正在尝试创建一个 JSON 数据。

<?php
header("Content-Type: application/json");
$db = new PDO('mysql:host=localhost;dbname=pl;charset=UTF-8', 'user', 'password');
if(isset($_POST['companyname']) == true && empty($_POST['companyname']) == false) {

    $searchterm = $_POST['companyname'];
    $i=0;
    $jasondata = '{';

    $query = $db->query("SELECT companyname, axiscategory FROM axispl WHERE companyname LIKE '$searchterm%' LIMIT 11");
    $c = 1;
    while (($row=$query->fetchAll(PDO::FETCH_ASSOC)) !==false && $c<11) {
        $i++;
        $companyname = $row["companyname"];
        $axiscategory = $row["axiscategory"];
        $jasondata .='"combi'.$i.'":{"companyname":"'.$companyname.'","axiscategory":"'.$axiscategory.'"},';
        $n=$row['companyname'];
        $l=strlen($n);
        if($l>50){$c = $c+2;}else{$c = $c+1;}       

    }
    $jasondata = chop($jasondata, ",");
    $jasondata .= '}';
    echo $jasondata;

}   
?>
4

1 回答 1

1

你应该改变什么?好吧,我之前提到过使用json_encode,Charles 非常正确地指出了安全漏洞。

我也会处理代码格式 - 我的建议是在合理的范围内工作。由于历史原因,这曾经是 80 个字符,但现在 100-120 是一个很好的限制 - 这意味着您可以在屏幕上从左到右堆叠多个代码查看器,而无需在每个代码查看器中水平滚动。您可以类似地发布到 StackOverflow,而不会出现包装问题!

考虑一下你的这个片段:

$query = $db->query("
    SELECT
        companyname, axiscategory
    FROM
        axispl
    WHERE
        companyname LIKE '$searchterm%'
    LIMIT 11
");

还:

$db = new PDO(
    'mysql:host=localhost;dbname=pl;charset=UTF-8',
    'user',
    'password'
);

更具可读性,是吗?我的座右铭:给你的代码空间来呼吸

于 2012-12-23T17:39:29.400 回答