mysql准备好的语句在新机器中无声地失败

时间:2014-05-26 17:54:53

标签: php mysql

我已将网络服务器从Ubuntu机器移动到Mac OS X机器,包括数据库。但是,我很惊讶地发现,在执行插入的原始服务器中运行良好的预处理语句不再有效。

$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,以及在准备之后似乎没有执行的事实。就php而言,我确实有execute(),但有趣的是它在准备之后似乎没有出现。

$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.
            }

1 个答案:

答案 0 :(得分:0)

我的猜测是绑定问题。尝试打印您绑定的所有变量,以查看值是否符合您的预期。