【问题标题】:PHP bindParam and multiple dropdownmenu'sPHP bindParam 和多个下拉菜单
【发布时间】:2014-04-01 12:53:19
【问题描述】:

当在表单中选择性别时,我想在查询中添加 WHERE。

我正在使用 bindParam 使用一个下拉菜单来获取年份,但我想要第二个 bindParam 将“AND Gender =”插入查询并使用“$_GET['dropdowngender'] 来填充它。

我想使用 if 语句来查看是否正在使用下拉菜单以及是否选择了性别以表明信息正在添加到查询中。这是我到目前为止所拥有的,但它似乎不起作用。

<?php

@include ('conn.php');

$query = "SELECT Name, MAX(Count) AS MaxCount, ZIPcode, Year 
          FROM Name_Data 
          WHERE Year = :year ";
if( isset( $_GET['dropdowngender'] ) {
    $query = $query . " AND Gender = :gender ";
}

$query = $query . " AND Name_Data.Count = 
         ( SELECT MAX( Count ) FROM Name_Data AS f 
           WHERE f.id = Name_Data.id 
         ) GROUP BY ZIPcode";

$query->bindParam(':year', $_GET['dropdownyear'], PDO::PARAM_STR);
if( isset( $_GET['dropdowngender'] ) {
    $query->bindParam(':gender', $_GET['dropdowngender'], PDO::PARAM_STR);
}

$query_send = $db->prepare($query);

$query->execute();

$result = $query->fetchAll (PDO::FETCH_ASSOC);

$jsonResult = json_encode($result);

echo $jsonResult;

?>

我的索引页面

<form method="post" action="#" id="form">
        <select name="dropdownyear" id="menuyear">
            <option selected>Choose a year</option>
        </select>
        <select name="dropdowngender" id="menugender">
            <option value="M">Male</option>
            <option value="F">Female</option>
        </select>
</form>

我的 jquery 脚本

$( "#form" )
.change(function(){
$(".marker").empty();
var SelectYear= $("#menuyear option:selected").text();
var SelectGender= $("#menugender option:selected").text();

    $.getJSON( "sql.php",  { dropdownyear: SelectYear, dropdowngender: SelectGender }, function(jsonData) {    
        console.log( jsonData );

        $.each( jsonData, function(key,row) {
            var newDiv=$('<div>');
            var Content = row ['Name'] + ' ';
            newDiv.text(Content);
            newDiv.appendTo($("#result"));
    }); // each

    }); //get json
}); // change function

【问题讨论】:

    标签: php jquery mysql sql isset


    【解决方案1】:

    请添加您收到的错误消息,您是否打开了错误报告,有一些语法错误会立即停止程序。接下来,您正在对字符串调用 bindParam,这也不起作用;)。

    (Zag dit toevallig op fb, gtz, d)

    编辑:

    这是未经测试的,但应该是这样的:

    // I assume you have an instance of the pdo object? I will call it $db for convenience.
    require_once 'conn.php';
    
    $q = "SELECT Name, MAX(Count) AS MaxCount, ZIPcode, Year 
          FROM Name_Data 
          WHERE Year = :year";
    
    if( isset( $_GET['dropdowngender'] ) && !empty( $_GET['dropdowngender']) ) {
        $q .= " AND Gender = :gender";
    }
    
    $q .= " AND Name_Data.Count = 
             ( SELECT MAX( Count ) FROM Name_Data AS f 
               WHERE f.id = Name_Data.id 
             ) GROUP BY ZIPcode";
    
    $stmt = $db->prepare($q);
    $stmt->bindParam(':year', $_GET['dropdownyear'], PDO::PARAM_STR);
    if( isset( $_GET['dropdowngender'] ) && !empty( $_GET['dropdowngender']) ) {
        $stmt->bindParam(':gender', $_GET['dropdowngender'], PDO::PARAM_STR);
    }
    $stmt->execute();
    
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    $jsonResult = json_encode($result);
    
    echo $jsonResult;
    

    【讨论】:

    • 错误是致命错误:在第 25 行的 sql.php 中的非对象上调用成员函数 bindParam(),即 $query->bindParam(':year', $_GET ['dropdownyear'], PDO::PARAM_STR);不知道param_str改到哪里,是varchar吧?
    • 对了,conn里面有什么,能不能把导入前的@符号去掉。它抑制 conn.php 中的错误
    • K,为您的代码添加了一个完全未经测试的修改。它可以让你前进。请注意,您的代码中还有其他内容可能需要修改,但我没有这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    相关资源
    最近更新 更多