0

うまく機能するMySQLクエリがありますが、それをMySQLIに変換しようとすると、機能しません: WORKING SQL QUERY

<?php 
require_once( 'opendb.php' );
 $id = '105';
    // Start date
    $date = '2015-11-10';
    // End date
    $end_date = '2015-11-15';

    while (strtotime($date) <= strtotime($end_date)) {

    $sql= "insert into test (Id,date,hours)
select  Id,
'".$date."' as date,
case dayname('".$date."')
    when 'Sunday' then Sun
    when 'Monday' then Mon
    when 'Tuesday' then Tue
    when 'Wednesday' then Wed
    when 'Thursday' then Thu
    when 'Friday' then Fri
    when 'Saturday' then Sat
else 0 end as hours
from emp where Id = '".$id."'";
mysql_query($sql);
    $date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
    }?>

同じクエリに select と insert がある場合に Mysqli の prepare ステートメントを使用する方法がわかりません。

MYSQLI が動作しない 動作させる方法がわからない

  <?php 
    $mysqli = new mysqli('localhost', 'xx', 'xx', 'xxx');
     $id = '105';
        // Start date
        $date = '2015-11-10';
        // End date
        $end_date = '2015-11-15';
     $stmt = $mysqli->prepare('INSERT INTO `test` (`Id`, `date`,`hours`) VALUES (?, ?, ?)');    
        while (strtotime($date) <= strtotime($end_date)) {      

    $sql= "select  Id,
    '".$date."' as date,
    case dayname('".$date."')
        when 'Sunday' then Sun
        when 'Monday' then Mon
        when 'Tuesday' then Tue
        when 'Wednesday' then Wed
        when 'Thursday' then Thu
        when 'Friday' then Fri
        when 'Saturday' then Sat
    else 0 end as '".$hours."'
    from emp where Id = 105 ";
    $mysqli->query($sql);;
          $stmt->bind_param('sss', $id , $date, $hours);
            $stmt->execute();
        $date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
        }
    ?>

挿入ステートメントで準備を使用する方法は理解していますが、挿入ステートメントと選択ステートメントを一緒に使用する場合は理解していません

select ステートメントは、テーブル 1 からその日の各日の列を取得しています。たとえば、id Mon = 8 Tue = 6 Wed = 4 Thu= 0 Fri = 6 Sat = 7 Sun = 0 で、それらを test テーブルに挿入します。

4

2 に答える 2

1

SQLでselectを使用して日付のフォーマットを行っているようです。代わりに、PHP で日付の書式設定を行うことができます。これにより、mysqli はプレーンなバニラ インサートを挿入します。

于 2015-09-30T15:36:00.503 に答える
0

コードには 2 つの問題があります。

  1. mysqli の準備済みステートメントに関するマニュアル ページを読むことができませんでした。
  2. 他の回答で述べられているように、ここでは準備済みステートメントも mysqi も SQL もまったく必要ありません。

必要なのは、基本的な日付操作を学ぶことだけです

$date = strtotime('2015-11-10');
$end_date = strtotime('2015-11-15');
do {
    echo date('D',$date);
}while (($date = strtotime("+1 day",$date))  <= $end_date);
于 2015-09-30T16:05:48.347 に答える