2017-04-08 11 views
1

私はこのようなジレンマと頭痛があります。私はPHPとMySQLで日付を使って作業しています。これが正常に動作し、私にいくつかの行PHP変数の使い方は?

SELECT * FROM reserva WHERE STR_TO_DATE('2017-04-07 19:00:00' , '%Y-%m-%d %H:%i:%s') BETWEEN fechaini AND fechafin 

fechafinとfechainiを返しWorkbenchとのphpMyAdminで

は、私はこのINSERTは、それが正常に動作しないのphpで、DATETIMEフィールドであり、私はDBとを充填していますこの。

public function storeReserva($fechaini) { 

    $uuid = uniqid('', true); 

    $stmt = $this->conn->prepare("INSERT INTO reserva(unique_id, fechaini, fechafin) VALUES(?, ? , ? + INTERVAL 2 HOUR)"); 
    $stmt->bind_param("sss", $uuid, $fechaini, $fechaini); 
    $result = $stmt->execute(); 
    $stmt->close(); 

    // check for successful store 
    if ($result) { 
     $stmt = $this->conn->prepare("SELECT * FROM reserva WHERE unique_id = ?"); 
     $stmt->bind_param("s", $uuid); 
     $stmt->execute(); 
     $reserva = $stmt->get_result()->fetch_assoc(); 
     $stmt->close(); 

     return $reserva; 

    } else { 

     return false; 
    } 
} 

は、私がフィールド

public function storeReserva2($fechaini) { 

    $stmt1 = $this->conn->prepare("SELECT * FROM reserva WHERE STR_TO_DATE('.$fechaini' , '%Y-%m-%d %H:%i:%s') BETWEEN fechaini AND fechafin"); 
    $result1 = $stmt1->execute(); 
    $stmt1->close(); 
    if ($result1 !== null) 
    { 

     $uuid = uniqid('', true); 
     $stmt = $this->conn->prepare("INSERT INTO reserva(unique_id, fechaini, fechafin) VALUES(?, ? , ? + INTERVAL 2 HOUR)"); 
     $stmt->bind_param("sss", $uuid, $fechaini, $fechaini); 
     $result = $stmt->execute(); 
     $stmt->close(); 

     // Revisa si se hizo la reserva con su id unica 
     if ($result) { 
      $stmt3 = $this->conn->prepare("SELECT * FROM reserva WHERE unique_id = ?"); 
      $stmt3->bind_param("s", $uuid); 
      $stmt3->execute(); 
      $reserva = $stmt3->get_result()->fetch_assoc(); 
      $stmt3->close(); 

      return $reserva; 

     } 

ステートメントdoesntの仕事の任意の行にある間に新しいfechainiありえないが、それは日付があるものは何でもヌルから何かdiferentを返すかどうかを確認します。私はあなたが正しい構文で私を助けることができる場合、私はPHP変数$ fechainiを間違って使用していると思います。

PD:私はドット($ fechaini)の有無にかかわらずテストしました (私はsententeが返すものは見えません、私はアンドロイドスタジオを使用しています...そこには方法がありますどのようなPHPのエコーや印刷を参照してください?私は高度な中間phpユーザーではない)。

+0

なぜ正しい形式のものが 'STR_TO_DATE'ですか? – tadman

+0

"Between"を使用するのが必要ですので、日付として読むでしょう –

+0

私のアプリから得られる$ fechaini変数を使用する正しい方法が必要です。変数にはyyyy-mm-ddのHHがあります。mm :ss形式、私はそれを挿入するために使用します。 –

答えて

1

これは、mysqliを使用して、これを解決する、私は間違った結果を管理していたがnum行、それは私が望むものでした。みんな、ありがとう。これはクエリの返品結果をどのように管理するのに役立つことを願っています。

public function storeReserva2($fechaini) { 




$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "android_api"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT * FROM reserva WHERE STR_TO_DATE('$fechaini' , '%Y-%m-%d %H:%i:%s') BETWEEN fechaini AND fechafin"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    echo "fechas existentes"; 
    return false; 

} else { 

    $uuid = uniqid('', true); 
      $stmt = $this->conn->prepare("INSERT INTO reserva(unique_id, fechaini, fechafin) VALUES(?, ? , ? + INTERVAL 2 HOUR)"); 
      $stmt->bind_param("sss", $uuid, $fechaini, $fechaini); 
      $result = $stmt->execute(); 
      $stmt->close(); 

      // Revisa si se hizo la reserva con su id unica 
      if ($result) { 
       $stmt3 = $this->conn->prepare("SELECT * FROM reserva WHERE unique_id = ?"); 
       $stmt3->bind_param("s", $uuid); 
       $stmt3->execute(); 
       $reserva = $stmt3->get_result()->fetch_assoc(); 
       $stmt3->close(); 

       return $reserva; 

      } 

} 
$conn->close(); 




    }