Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP和&;从SQL db获取数据;在特定情况下的子句之间_Php_Sql_Forms - Fatal编程技术网

如何使用PHP和&;从SQL db获取数据;在特定情况下的子句之间

如何使用PHP和&;从SQL db获取数据;在特定情况下的子句之间,php,sql,forms,Php,Sql,Forms,我正在为学校做作业,在那里我有一个html表单、一个php文件和一个SQL数据库。在html表单中,我有一个下拉列表,要求输入zipcode,一个文本字段要求输入姓氏,另外两个文本字段要求输入通话长度范围(一个最小,一个最大)。代码如下: <form action="database.php"> <h3 class="prompt1"> Select Your Area Code </h3> <select name="areaCode">

我正在为学校做作业,在那里我有一个html表单、一个php文件和一个SQL数据库。在html表单中,我有一个下拉列表,要求输入zipcode,一个文本字段要求输入姓氏,另外两个文本字段要求输入通话长度范围(一个最小,一个最大)。代码如下:

<form action="database.php">
<h3 class="prompt1"> Select Your Area Code </h3>
<select name="areaCode">
    <option value="111">111</option>
                       etc...
</select>

<h3 class="prompt1"> Enter Last Name </h3>
<input type="text" size="35" name="lastName">

<h3 class="prompt1"> Select Call Length Range </h3>
<input type="text" size="3" value="min" name="min">–
<input type="text" size="3" value="max" name="max">

    <input type="submit">
</form>
<?php 

require '../../connection.php'; /* connection to db is in another file*/

$min = $_GET['min'];
$max = $_GET['max'];

$sql = "SELECT * FROM project 
    WHERE (areaCode = :areaCode 
    AND lastName = :lastName 
    AND (callLength BETWEEN $min AND $max))";

$stmt = $dataconn -> prepare($sql); 
$stmt -> execute(array(":areaCode"=>$_GET['areaCode'])); /* line 14 */
$results = $stmt->fetchAll();

/* print out $results in a table down here /*

?>
通过execute语句,我学到了我应该做的事情(这是一节课的摘录):

  • 执行语句,将id替换为查询中的命名参数: $stmt->execute(数组(':id'=>'1') 因此,由于我查询了areacode、lastName和介于最小值和最大值之间的callLength。我假设我需要在execute语句中包含这些参数,目前我在execute语句中只包含areacode,但如果我也包含lastName和callLength,我应该有如下内容(我认为):

    问题是,我不知道如何将callLength部分包含到execute语句中,因为它包含了一个BETWEEN子句,我不能将
    callLength“=>$\u GET['callLength']
    。如有任何帮助,我们将不胜感激。

    您可以构建一个嵌入了正确字符串的查询并直接查询,而无需准备语句然后绑定参数,也可以在execute()中使用替换(绑定)当你混合使用这两个命令时,会更加混乱。在这个孤立的情况下,你做什么并不重要,但是如果你使用execute()此时,您可以保留查询并将其与不同的参数一起反复使用,因此在某些代码中,这是一个巨大的性能胜利。但正如错误消息所述,如果使用替换,则SQL语句中的标记或标记数必须与传递给execute()的数组中的参数数相匹配。 这两方面的例子:
    $sql = "SELECT * FROM project 
        WHERE (areaCode = :areaCode 
        AND lastName = :lastName 
        AND (callLength BETWEEN :min AND :max))";
    
    $stmt = $dataconn -> prepare($sql); 
    $stmt -> execute(array(":areaCode"=>$_GET['areaCode'], ":lastName"=>$_GET['lastName'],
        ":min"=>$_GET['min'], ":max"=>$_GET['max']));
    $results = $stmt->fetchAll();
    /* print out $results in a table down here /*
    ?>
    
    否则:

    <?php 
    require '../../connection.php'; /* connection to db is in another file*/
    $min = $_GET['min'];
    $max = $_GET['max'];
    $areaCode = $_GET['areaCode'];
    $lastName = $_GET['lastName'];
    
    $sql = "SELECT * FROM project 
        WHERE (areaCode = $areaCode 
        AND lastName = $lastName 
        AND (callLength BETWEEN $min AND $max))";
    
    $results = $dataconn -> query($sql);
    /* print out $results in a table down here /*
    ?>
    
    
    
    $sql = "SELECT * FROM project 
        WHERE (areaCode = :areaCode 
        AND lastName = :lastName 
        AND (callLength BETWEEN :min AND :max))";
    
    $stmt = $dataconn -> prepare($sql); 
    $stmt -> execute(array(":areaCode"=>$_GET['areaCode'], ":lastName"=>$_GET['lastName'],
        ":min"=>$_GET['min'], ":max"=>$_GET['max']));
    $results = $stmt->fetchAll();
    /* print out $results in a table down here /*
    ?>
    
    <?php 
    require '../../connection.php'; /* connection to db is in another file*/
    $min = $_GET['min'];
    $max = $_GET['max'];
    $areaCode = $_GET['areaCode'];
    $lastName = $_GET['lastName'];
    
    $sql = "SELECT * FROM project 
        WHERE (areaCode = $areaCode 
        AND lastName = $lastName 
        AND (callLength BETWEEN $min AND $max))";
    
    $results = $dataconn -> query($sql);
    /* print out $results in a table down here /*
    ?>