Php mysql准备的语句在新机器中无声失败
我已经将一个Web服务器从Ubuntu机器移动到MacOSX机器,包括数据库。然而,我惊讶地看到,在执行插入的原始服务器中工作得非常好的准备好的语句不再工作了Php mysql准备的语句在新机器中无声失败,php,mysql,Php,Mysql,我已经将一个Web服务器从Ubuntu机器移动到MacOSX机器,包括数据库。然而,我惊讶地看到,在执行插入的原始服务器中工作得非常好的准备好的语句不再工作了 $stmt->execute()不返回false,所以一切似乎都正常,但我不能 请参见插入到数据库中的新数据 PHP错误日志显示没有问题 我检查了特权,一切看起来都很好 准备好的语句是否需要以某种特定方式启用?我如何检查他们是否成功 我与服务器的连接是通过同一台机器上的localhost完成的 [编辑] 启用常规日志后,我可以看到: ta
$stmt->execute()代码>不返回false,所以一切似乎都正常,但我不能
请参见插入到数据库中的新数据
PHP错误日志显示没有问题
我检查了特权,一切看起来都很好
准备好的语句是否需要以某种特定方式启用?我如何检查他们是否成功
我与服务器的连接是通过同一台机器上的localhost完成的
[编辑]
启用常规日志后,我可以看到:
tail -f /var/log/apache2/error_log_mysql
/usr/local/mysql/bin/mysqld, Version: 5.6.17-log (MySQL Community Server (GPL)). started
with:
Tcp port: 0 Unix socket: (null)
Time Id Command Argument
140526 13:36:28 3 Connect root@localhost on database
3 Prepare select * from `users` where email_addr=?
3 Execute select * from `users` where email_addr='daorejw@ijaod.com'
3 Close stmt
3 Quit
4 Connect root@localhost on database
4 Prepare insert into `users` (first_name,last_name,password,email_addr,country,zip_code,company_name) VALUES(?,?,?,?,?,?,?)
4 Quit
我怀疑端口为0,套接字为Null,并且在prepare之后似乎没有执行。就php而言,我确实有execute(),但有趣的是,它似乎没有在prepare之后出现
$sql="insert into `users` (first_name,last_name,password,email_addr,country,zip_code,company_name,a, t)
VALUES(?,?,?,?,?,?,?,0,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssssssss', $p_firstname,$p_lastname,$p_password_hash,$p_emailaddr,$p_countryname,$p_zcode,$p_companyname,$t);
$stmt->execute();
if($stmt == false)
{
error_log("SQL Failed", 0);
die('Error: ' . mysqli_error($conn));
echo "Error adding record</br>";
}
else
{
// This part executes successfully.
}
$sql=“插入到“用户”中(名字、姓氏、密码、电子邮件地址、国家、邮政编码、公司名称、a、t)
数值(?,,,,,,,,,,0,,)”;
$stmt=$conn->prepare($sql);
$stmt->bind_参数('ssssss',$p_firstname,$p_lastname,$p_password_hash,$p_emailaddr,$p_countryname,$p_zcode,$p_companyname,$t);
$stmt->execute();
如果($stmt==false)
{
错误日志(“SQL失败”,0);
die('Error:'.mysqli_Error($conn));
echo“添加记录时出错”;
}
其他的
{
//此部分成功执行。
}
我猜这是绑定的问题。尝试打印所有绑定的变量,以查看值是否与预期值一致。再次检查应用程序是否仍在向旧计算机插入数据。:-)虽然这是一个有趣的观察结果,但旧服务器已脱机。您可以启用常规日志
,并监视SQL语句的准备和执行。准备好的语句应该可以工作,没有配置来启用或禁用它们。我们可以有更多的代码吗?至少这两个调用中与db有关的部分是表(和db)还是InnoDB?InnoDB引擎是否处于活动状态?等等,语句不需要InnoDB,对吗?我在考虑事务。即使是这样,我也希望执行应该显示,即使数据错误。尝试设置mysqli_report(mysqli_report_ALL);在此代码之前。我读到,没有it,错误处理是不同的,就像我们在正确的轨道上。添加此项后,我看到一个未处理的异常,该异常与其中一个字段缺少默认值有关。我会尝试修复它,然后再看看。可能您的旧服务器在全局设置中设置了不同的报告选项,如果它在全局设置中工作的话。其中一个字段需要一个默认值。也许这与我之前运行的另一个版本有所不同。基本上,我必须将绑定中的一个字段设置为0。