【问题标题】:PHP trying to send separate date and time variables to sqlPHP试图将单独的日期和时间变量发送到sql
【发布时间】:2015-12-05 18:37:34
【问题描述】:

我正在尝试将两个单独的变量发送到 mysql 数据库,一个用于日期,一个用于时间。目前,这两个变量都是字符串,mysql 的列被格式化为日期和时间类型。我应该在我的 sql 查询中发送什么变量?

编辑:添加错误

致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE [23000]:完整性约束违规:1452 无法添加或 更新子行:外键约束失败(jk497.Booking, 约束 Booking_ibfk_1 FOREIGN KEY (PerfDate, PerfTime) 参考 性能(PerfDate,PerfTime))' /home/cuc/jk497/public_html/bookingReceipt.php 在第 58 行

我的代码

$time = "17:00:00"; 
$sql = "insert into Booking values (':id', ':date', ':time', ':fullName', ':email', ':rowNum', ':numSeats', ':bookedSeats');"; 
$handle = $conn->prepare($sql); 
$handle->execute(array(':id' => $_SESSION['id'], ':date' => $SESSION['date'], ':time' => $time, ':fullName' => $_SESSION['fullName'], ':email' => $_SESSION['email'], ':rowNum' => $seatIndex, ':numSeats' => $_SESSION['numSeats'], ':bookedSeats' => $_SESSION['bookedSeats']));

【问题讨论】:

  • 到目前为止您尝试过什么?最好添加一些您拥有的代码和错误以及您的期望。阅读stackoverflow.com/help/how-to-askstackoverflow.com/help/mcve 了解如何改进您的问题。
  • Glavic,我尝试将它们作为字符串传递,并且 sql 数据库反映了它:(
  • @davejal 我从 sql 得到的错误消息如下: 致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行: /home/cuc/ 中的外键约束失败 (jk497.Booking, CONSTRAINT Booking_ibfk_1 FOREIGN KEY (PerfDate, PerfTime) REFERENCES Performance (PerfDate, PerfTime))' jk497/public_html/bookingReceipt.php 第 58 行
  • 请添加足够多的结构,以便我们进一步提供帮助
  • @davejal 正在处理它,难以以可读的方式发布代码^^

标签: php sql date time formatting


【解决方案1】:

this 示例我首先将代码更改为:

$sql = "insert into Booking ('id','date','time','fullName','email','rowNum','numSeats','bookedSeats') values (:id,:date,:time,:fullName,:email,:rowNum,:numSeats,:bookedSeats)"; 
$handle = $conn->prepare($sql); 
$handle->bindParam(':id',$_SESSION['id']);
$handle->bindParam(':date',$SESSION['date']);
$handle->bindParam(':time',$time);
$handle->bindParam(':fullName',$_SESSION['fullName']);
$handle->bindParam(':email',$_SESSION['email']);
$handle->bindParam(':rowNum',$seatIndex);
$handle->bindParam(':numSeats',$_SESSION['numSeats']);
$handle->bindParam(':bookedSeats',$_SESSION['bookedSeats']);

$handle->execute();

需要考虑的事项:

  1. 查询有特定的查询顺序

    insert into table () values ();
    insert into table values (); //is what you had (this is not correct and will never work afaik)
    
  2. 您将值作为数组发送,不知道为什么,但您可以发送值

    bind_param($_SESSION['id'],$SESSION['date'],$time,$_SESSION['fullName'],$_SESSION['email'],$seatIndex,$_SESSION['numSeats'],$_SESSION['bookedSeats'])
    

从头开始处理您的查询

改变:

$sql = "insert into Booking values (':id', ':date', ':time', ':fullName', ':email', ':rowNum', ':numSeats', ':bookedSeats');"; 

进入

$sql = "insert into Booking (id,date,time,fullName,email,rowNum,numSeats, bookedSeats) values (:id,:date,:time,:fullName,:email,:rowNum,:numSeats, :bookedSeats)";

【讨论】:

  • 更改为您的建议,现在我收到错误:致命错误:在第 42 行的 /home/cuc/jk497/public_html/bookingReceipt.php 中调用未定义的方法 PDOStatement::bind_param()跨度>
  • 对不起,我给你的是mysqli的例子,一会儿改成pdo
  • 回到你一开始的样子,用我上次的编辑来改变它
  • 我也把 bind_param 改成了 bindParam,mysqli 和 pdo 的区别,所以现在你应该不会再出现这个错误了
  • 根据您关于回到我的原始代码的建议(并且在将 sql 列标题更改为实际名称之后),我设法让它工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
相关资源
最近更新 更多