如何在PHP中为两个日期/时间之间的SELECT SELECT编写SELECT语句? [英] How to write a prepared statement in PHP for a SELECT BETWEEN mysql query between two Date/Times?

查看:72
本文介绍了如何在PHP中为两个日期/时间之间的SELECT SELECT编写SELECT语句?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的,最近才学到有关准备好的语句和PDO的知识.我已经能够为我的UPDATE和从表" WHERE"中的常规选择字段"创建准备好的语句.但是,在从表"中创建选择"字段时遇到了麻烦,其中字段"在之间"查询.我可以这样做:

I am new and have just recently learned about prepared statements and PDO. I have been able to create prepared statements for my UPDATE's and regular "SELECT 'field' from 'table' WHERE' statements. However, I have been having trouble creating a 'SELECT 'field' from 'table' where 'field' BETWEEN' query. I am able to do it this way:

 $sql = "SELECT * FROM sample WHERE start_samp_date_time BETWEEN '2014-10-01 00:00:00' AND '2014-11-30 00:00:00'";
 $result = mysqli_query($dbc,"$sql");

if ($result->num_rows > 0) {
    // output data of each row

    $header_ct = 0;
    while($row = mysqli_fetch_assoc($result)){
        #print_r($row);
    }
}

但是,我无法使其与准备好的语句或PDO一起使用:

However, I am not able to get it to work with either prepared statements or PDO:

准备好的声明:

$stmt1 = $dbc->prepare("SELECT * FROM sample WHERE start_samp_date_time 
                        BETWEEN (?) AND (?)");
$stmt1 -> bind_param('ii', $p_smydate , $p_emydate);


if ($stmt1->execute()){

    $metaResults = $stmt1->result_metadata();
    $fields = $metaResults->fetch_fields();
    $statementParams='';
    //build the bind_results statement dynamically so I can get the results in an array
    foreach($fields as $field){
        if(empty($statementParams)){
            $statementParams.="\$column['".$field->name."']";
        }
        else{

            $statementParams.=", \$column['".$field->name."']";
        }

    }
    $statment="\$stmt1->bind_result($statementParams);";
    #echo "statement:".$statementParams."<br>";
    eval($statment);
    #print_r($fields);


    ?><table>
        <tr><?php


    #print headers
   foreach ($fields as $keys => $val){
            $name = $val->name; 
            ?><th class = "reg"><?php echo "{$name}"; ?></th> <?php
    } 
        ?></tr>
        <tr><?php

    #print out mysql query results
    while($stmt1->fetch()){
        foreach ($column as $keys => $val){
            echo "keys:".$keys.'<br>';
            echo "vals:".$val.'<br>';

            ?><td class = "reg"><?php echo "{$val}"; ?></td><?php 

        }
        #echo "column".$column['sample_name'];


    ?> </tr><?php
    }

    ?></table><?php 

} 
else {
    $error = 'true';
    die('execute() failed: ' . htmlspecialchars($stmt->error));

}
#echo 'done';
$stmt1 -> close();

}

因为获取"不会返回任何内容.

as the 'fetch' does not return anything.

PDO:

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $conn->prepare("SELECT * FROM sample WHERE start_samp_date_time 
                       BETWEEN start = :start AND end = :end");
$sth->bindParam(':start',$p_smydate);
$sth->bindParam(':end',$p_emydate);
$sth->execute();

print_r($sth);

我收到以下错误消息:

致命错误:带有消息的未捕获异常'PDOException' 'SQLSTATE [42000]:语法错误或访问冲突:1064您有一个 您的SQL语法错误;检查与您的手册相对应的手册 适用于'='附近的正确语法的MySQL服务器版本2014-10-01 00:00:00'AND end ='2014-11-30 00:00:00''在第1行 C:\ xampp_2 \ htdocs \ series \ dynamic \ query_date_results.php:54堆栈 跟踪:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '2014-10-01 00:00:00' AND end = '2014-11-30 00:00:00'' at line 1' in C:\xampp_2\htdocs\series\dynamic\query_date_results.php:54 Stack trace:

#0 C:\ xampp_2 \ htdocs \ series \ dynamic \ query_date_results.php(54):PDOStatement-> execute()

#0 C:\xampp_2\htdocs\series\dynamic\query_date_results.php(54): PDOStatement->execute()

在第54行的C:\ xampp_2 \ htdocs \ series \ dynamic \ query_date_results.php中抛出#1 {main}

#1 {main} thrown in C:\xampp_2\htdocs\series\dynamic\query_date_results.php on line 54

任何建议都会对我有很大帮助.谢谢!

Any advice would help me greatly. Thanks you!

推荐答案

我能够使用@Prix的建议并将"ii"更改为"ss".我没有意识到日期/时间被存储为字符串.谢谢大家的帮助!

I was able to use @Prix 's suggestion and changed the 'ii' to 'ss'. I was unaware that the date/time was being stored as a string. Thank you all for your help!

这篇关于如何在PHP中为两个日期/时间之间的SELECT SELECT编写SELECT语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆