MySQL表没有更新,找不到错误信息

时间:2010-03-28 22:31:59

标签: php mysql

我的知识水平就像zilch,但请耐心等待。

我有一个使用Smarty模板引擎的PHP / MySQL内置网站。有一个注册表单,由于某种原因,没有将数据发布到数据库。这是功能:

$u = new H_User;
    $u->setFrom($p);
    $smarty->assign('user', $u);
    $val = $u->validate();
    if ($val === true) {

        $temp = new H_User;
        $temp->orderBy('user_id desc');
        $temp->find(true);

        $next_id = $temp->user_id + 1;

        $u->user_id = $next_id;
        $u->user_password = md5($p['user_password']);
        $u->user_regdate = mktime();
        $u->user_active = 0;
        $u->insert();
        $hash = md5($u->user_email . $u->user_regdate);

        $smarty->assign('hash', $hash);
        $smarty->assign('user', $u);

        $smarty->assign('registration_complete', true);

        $d = new H_Demographic;
        $d->setFrom($p);
        $d->insert();

我怎么能弄清楚这里有什么问题?我没有得到任何PHP错误,我不知道如何让MySQL显示可能表明该语法有什么问题的错误。

根据要求提供更多信息

#
# Table structure for table `user`
#

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `user_id` mediumint(8) NOT NULL default '0',
  `user_active` tinyint(1) default '1',
  `username` varchar(25) NOT NULL default '',
  `user_password` varchar(32) NOT NULL default '',
  `user_session_time` int(11) NOT NULL default '0',
  `user_session_page` smallint(5) NOT NULL default '0',
  `user_lastvisit` int(11) NOT NULL default '0',
  `user_regdate` int(11) NOT NULL default '0',
  `user_level` tinyint(4) default '0',
  `user_posts` mediumint(8) unsigned NOT NULL default '0',
  `user_timezone` decimal(5,2) NOT NULL default '0.00',
  `user_style` tinyint(4) default NULL,
  `user_lang` varchar(255) default NULL,
  `user_dateformat` varchar(14) NOT NULL default 'd M Y H:i',
  `user_new_privmsg` smallint(5) unsigned NOT NULL default '0',
  `user_unread_privmsg` smallint(5) unsigned NOT NULL default '0',
  `user_last_privmsg` int(11) NOT NULL default '0',
  `user_emailtime` int(11) default NULL,
  `user_viewemail` tinyint(1) default NULL,
  `user_attachsig` tinyint(1) default NULL,
  `user_allowhtml` tinyint(1) default '1',
  `user_allowbbcode` tinyint(1) default '1',
  `user_allowsmile` tinyint(1) default '1',
  `user_allowavatar` tinyint(1) NOT NULL default '1',
  `user_allow_pm` tinyint(1) NOT NULL default '1',
  `user_allow_viewonline` tinyint(1) NOT NULL default '1',
  `user_notify` tinyint(1) NOT NULL default '1',
  `user_notify_pm` tinyint(1) NOT NULL default '0',
  `user_popup_pm` tinyint(1) NOT NULL default '0',
  `user_rank` int(11) default '0',
  `user_avatar` varchar(100) default NULL,
  `user_avatar_type` tinyint(4) NOT NULL default '0',
  `user_email` varchar(255) default NULL,
  `user_icq` varchar(15) default NULL,
  `user_website` varchar(100) default NULL,
  `user_from` varchar(100) default NULL,
  `user_sig` text,
  `user_sig_bbcode_uid` varchar(10) default NULL,
  `user_aim` varchar(255) default NULL,
  `user_yim` varchar(255) default NULL,
  `user_msnm` varchar(255) default NULL,
  `user_occ` varchar(100) default NULL,
  `user_interests` varchar(255) default NULL,
  `user_actkey` varchar(32) default NULL,
  `user_newpasswd` varchar(32) default NULL,
  `first_name` varchar(40) NOT NULL default '',
  `last_name` varchar(40) NOT NULL default '',
  `level` int(10) unsigned NOT NULL default '0',
  `disabled` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`user_id`),
  KEY `user_session_time` (`user_session_time`)
) TYPE=MyISAM;

4 个答案:

答案 0 :(得分:0)

我仍然试图解决这个问题并将其作为评论和答案转储,所以如果这显示为答案,我会道歉,因为事实并非如此。尝试使用以下代码来吐出错误:

error_reporting(E_ALL);
ini_set('display_errors', '1');

您可能需要查看php.ini文件以允许显示错误。

答案 1 :(得分:0)

您是否可以访问服务器错误日志?我认为这应该显示MySQL错误。但正如Pekka所说,这还不足以让你继续下去。

答案 2 :(得分:0)

MySQL连接都有办法访问它们抛出的最后错误。这取决于您使用哪种方法连接到数据库。例如,我使用mysqli类。因此,作为一个例子,直接来自PHP的网站:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if (!$mysqli->query("SET a=1")) {
    printf("Errormessage: %s\n", $mysqli->error);
}

是我如何连接,然后如果它被抛出则检索错误。你如何向数据库发送数据?您是否有将数据注入数据库的代码示例?

答案 3 :(得分:0)

trigger_error(mysql_error());

之后

$d->insert();

修改

正如Marc B指出的那样,你需要使用

trigger_error(mysqli_error());

代替mysqli_个函数。 PHP有时会很蹩脚。