2015-09-30 69 views
0

我有一個MySQL查詢的偉大工程,但是當我嘗試將其轉換爲mysqli的,我不能得到它的工作: 工作SQL查詢Mysql的插入和選擇查詢一起轉換爲mysqli的

<?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))); 
    }?> 

不知道如果在選擇並插入相同查詢時如何使用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))); 
     } 
    ?> 

我明白瞭如何使用一個INSERT語句準備,但不是當它是一個insert和select語句一起

select語句從表1中獲得當天的工作時間,例如:id Mon = 8 Tue = 6 Wed = 4 Thu = 0 Fri = 6 Sat = 7 Sun = 0並將它們插入測試表

+0

$ mysqli->準備(「INSERT INTO'test'(Id',缺少'報價 –

+0

它只是INSERT INTO測試(ID,日期,小時)SELECT id,?as date,case ...否則o結束爲?FROM ...這應該是你準備的東西(在你開始循環之前) – e4c5

+0

不確定你是什麼我有2表第一個表作爲empid然後monsun列作爲列,然後每天他們在那一天的工作時間,然後我每天在日期範圍內循環,例如2015/10/12 =星期一,因此8小時從表1存儲,因爲他們在週一工作。 MySQL查詢很有效le會很好 –

回答

1

它的外觀就像你在sql中使用select來做日期格式一樣。相反,您可以在PHP中使用日期格式。這將使mysqli插入一個普通的香草插入。

+0

select語句將當天的工作時間作爲每天的工作時間,例如id Mon = 8 Tue = 6 Wed = 4 Thu = 0 Fri = 6 Sat = 7 Sun = 0並將它們插入測試表 –

0

您的代碼有兩個問題。

  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); 
+0

好吧,我不只是呼應這一天!我有兩張桌子,一張桌子上有userid,然後是7列,每張桌子上都有蒙太陽,每個員工每天工作不同的時間,因此查詢需要說2015-11-10這是一個星期二可以獲得週二爲該員工工作的小時數是8然後將用戶日期和小時插入到測試表數據庫中... –