2010-03-28 48 views
0

我在这里的知识水平就像zilch,但请耐心等待。MySQL表不更新,找不到错误信息

我有一个使用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; 
+1

你显示的代码不相关,我们需要看看'$ d-> insert()'做了什么。 – 2010-03-28 22:37:10

+0

来自与“H_User”类关联的表的模式也不错。 – prodigitalson 2010-03-28 22:55:47

回答

0

我仍然在试图弄清楚这一点,并倾倒在此作为与回答的评论,所以我道歉,如果这显示为一个答案,因为它不是。尝试把下面的代码吐出你的错误:

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

你可能想看看你的php.ini文件,以允许显示错误以及。

+0

添加了代码,但没有发现错误 – mobius1ski 2010-03-28 23:25:25

0

你有权限访问你的服务器错误日志吗?这应该显示MySQL错误,我想。但正如Pekka所说,这还不是足够的信息。

+0

我这样做,但它不报告mysql错误或任何与此网站相关的错误。 – mobius1ski 2010-03-28 23:30:05

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); 
} 

是我如何连接,然后在引发时检索错误。你如何发送数据到数据库?你有没有将数据注入数据库的代码示例?

0

trigger_error(mysql_error()); 

$d->insert(); 

编辑后:

正如马克乙指出的那样,你将需要使用

trigger_error(mysqli_error()); 

代替mysqli_函数。 PHP有时可能会跛脚。

+0

这只会在smarty在内部使用mysql _ *()函数时才起作用。如果它直接使用mysqli,或者通过MDB2/PDO间接使用,这将毫无用处。 – 2010-03-29 01:16:52

+0

@Marc B:怎么这样? Smarty是否会绕过PHP的MySQL功能?根据手册,'mysql_error()'“返回最后一个MySQL函数的错误文本。”当然,这将是任何*调用MySQL? – Duncan 2010-03-29 01:29:59

+0

mysqli和mysql使用独立的连接池。一个生成的db句柄不能用于另一个的等效函数调用。 – 2010-03-30 03:50:22