Php页面中向数据库插入数据失败,但用控制台可以

ToB蓝波湾 2011-08-10 08:59:52
遇到了一个相当无语的问题啊

我在php网站中向mysql数据库中插入数据不成功,但是同样的语句用mysql控制台插入就可以,急死我了,大家帮忙看看啊

php页面:
<?php
set_time_limit(0);
require ("../include/config.inc.php");
function makedate() {
// 获取当前系统时间
$curtime = getdate();
$curtime =$curtime['year'] . "-".$curtime['mon'] . "-".$curtime['mday'] ;

Return $curtime;
}
$typearray = array('image/jpeg','image/jpg','image/pjpeg','image/png','image/gif','image/x-png','image/jpeg','image/bmp');
if(isset($_POST['submit']))
{
$date=makedate();
$title=$_POST['title'];
$des=$_POST['des'];
$author=$_POST['author'];
$source=$_POST['source'];
$error = $_FILES['img']['error'];
$name = $_FILES['img']['name'];
$type = $_FILES['img']['type'];
$size = $_FILES['img']['size'];
$tmpname = $_FILES['img']['tmp_name'];
$msg = "";
$imgshow = "";
foreach($error as $key=>$err)
{
if($err>0)
{
if($err==4)
{
$msg = "没有选择文件";
echo $msg;
exit();
}else
{
$msg = $name[$key]."---上传出错 ;";
echo $msg;
exit();
}
}else
{
if(!in_array($type[$key],$typearray))
{
$msg = $name[$key]."---不支持上传此类型的文件;";
echo $msg;
exit();
}else if($size[0]>2097152)
{
$msg = $name[$key]."---文件超过2M;";
echo $msg;
exit();
}else if(!is_uploaded_file($tmpname[$key]))
{
$msg = $name[$key]."---非法方式提交文件;";
echo $msg;
exit();

}else
{
$ext = explode('.',$name[$key]);
$fname = time().rand(101,999).'.'.end($ext);
$path = "upimage/".$fname;
$upflag = move_uploaded_file($tmpname[$key], $path);
if(!$upflag)
{
$msg = $name[$key]."---转移文件出错;";
echo $msg;
exit();
}else
{
$url = "upimage/".$fname;

mysql_pconnect($dbhost,$dbuser,$dbpasswd);
mysql_query("set names 'gb2312'");
$sql = "insert into imgs(title,laiyuan,des,date,author,url)values('$title','$source','$des','$date','$author','$url')";
echo $sql;
try
{
if(mysql_db_query($dbname,$sql))
{
echo "aaaaaaaaaaaaaaaaaaaaaaaaaaa";
}
}catch(Exception $e)
{
echo $e->getMessage();
}
}
}
}
}
}
?>


大家帮忙看看哪




急死我了!!
...全文
408 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ToB蓝波湾 2011-08-16
  • 打赏
  • 举报
回复
另外,程序能够执行到插入语句那里,而且输出的信息准确无误,同样的sql语句,到控制台执行就可以,到了php页面中就不行,简直无语了 呵呵
后来发现是编码的问题,纠结了一次终于搞定了 呵呵
ToB蓝波湾 2011-08-16
  • 打赏
  • 举报
回复
各位大侠,经过自己的反复修改终于搞定了

我使用了echo mysql_errno()."".mysql_error();输入错误号和错误原因,发现是由于编码正确导致的,不过过去好几天了,我都忘记自己是怎么修改的啦~~ 好像是改了一些编码,改了编码之后能够插入到数据库中,但是新的问题来了,就是数据库乱码~~ 看来网上的很多方法,都不管用,后来因为自己有插入新闻的一个php网页,我在那个网页的基础上修改了很少一部分内容,插入到数据库就成功了,呵呵

不过谢谢各位啦~~~


总结一下:
我觉得解决问题的关键是要发现问题,幸好那晚上我想到了用输出sql错误代码和错误信息的方式才知道为什么插入不了,不然估计到现在也解决不了呢

呵呵 谢谢各位啦~~~ 谢谢你们
swordphp 2011-08-10
  • 打赏
  • 举报
回复
可以试试看能不能把mysql_pconnect换成mysql_connect
长连接可能导致mysql过多的连接数是myql不被允许的.
并且数据库如果因为某些原因锁定了你只能重启.
以下摘自PHP中文手册.
//----------------------------------------------------
数据库永久连接
永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。

对 web 服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会提供任何非永久连接无法提供的特殊功能。

为什么?

这和 web 服务器工作的方式有关。web 服务器可以用三种方法来利用 PHP 生成 web 页面。

第一种方法是将 PHP 用作一个“外壳”。以这种方法运行,PHP 会为向 web 服务器提出的每个 PHP 页面请求生成并结束一个 PHP 解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向 SQL 数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变——因为它们根本不是永久的。

第二,也是最常用的方法,是把 PHP 用作多进程 web 服务器的一个模块,这种方法目前只适用于 Apache。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成 web 页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有请求 SQL 服务的后继页面都能够重新使用这个已经建立的 SQL Server 连接。

最后一种方法是将 PHP 用作多线程 web 服务器的一个插件。目前 PHP 4 已经支持 ISAPI、WSAPI 和 NSAPI(在 Windows 环境下),这些使得 PHP 可以被用作诸如 Netscape FastTrack (iPlanet)、Microsoft's Internet Information Server (IIS) 和 O'Reilly's WebSite Pro 等多线程 web 服务器的插件。永久连接的行为和前面所描述的多过程模型在本质上是相同的。注意 PHP 3 不支持 SAPI。

如果永久连接并没有任何附加的功能,那么使用它有什么好处?

答案非常简单——效率。当客户端对 SQL 服务器的连接请求非常频繁时,永久连接将更加高效。连接请求频繁的标准取决于很多因素。例如,数据库的种类,数据库服务和 web 服务是否在同一台服务器上,SQL 服务器如何加载负载等。但我们至少知道,当连接请求很频繁时,永久连接将显著的提高效率。它使得每个子进程在其生命周期中只做一次连接操作,而非每次在处理一个页面时都要向 SQL 服务器提出连接请求。这也就是说,每个子进程将对服务器建立各自独立的永久连接。例如,如果有 20 个不同的子进程运行某脚本建立了永久的 SQL 服务器永久连接,那么实际上向该 SQL 服务器建立了 20 个不同的永久连接,每个进程占有一个。

注意,如果永久连接的子进程数目超过了设定的数据库连接数限制,系统将会产生一些缺陷。如果数据库的同时连接数限制为 16,而在繁忙会话的情况下,有 17 个线程试图连接,那么有一个线程将无法连接。如果这个时候,在脚本中出现了使得连接无法关闭的错误(例如无限循环),则该数据库的 16 个连接将迅速地受到影响。请查阅使用的数据库的文档,以获取关于如何处理已放弃的及闲置的连接的方法。

Warning
在使用永久连接时还有一些特别的问题需要注意。例如在永久连接中使用数据表锁时,如果脚本不管什么原因无法释放该数据表锁,其随后使用相同连接的脚本将会被永久的阻塞,使得需要重新启动 httpd 服务或者数据库服务。另外,在使用事务处理时,如果脚本在事务阻塞产生前结束,则该阻塞也会影响到使用相同连接的下一个脚本。不管在什么情况下,都可以通过使用 register_shutdown_function() 函数来注册一个简单的清理函数来打开数据表锁,或者回滚事务。或者更好的处理方法,是不在使用数据表锁或者事务处理的脚本中使用永久连接,这可以从根本上解决这个问题(当然还可以在其它地方使用永久连接)。

以下是一点重要的总结。永久连接是为通常连接建立一对一的分布而设计的。这意味着必须能够保证在将永久连接替换为非永久连接时,脚本的行为不会改变。使用永久连接将(非常)有可能改变脚本的效率,但不改变其行为!

参见 fbsql_pconnect(),ibase_pconnect(),ifx_pconnect(),ingres_pconnect(),msql_pconnect(),mssql_pconnect(),mysql_pconnect(),ociplogon(),odbc_pconnect(),ora_plogon(),pfsockopen(),pg_pconnect() 和 sybase_pconnect()。


//--------------------------------------------------------------------------------
xuzuning 2011-08-10
  • 打赏
  • 举报
回复
应该是能执行到这里了吧?

mysql_pconnect($dbhost,$dbuser,$dbpasswd) or die(mysql_error());
mysql_query("set names 'gb2312'"); //有疑问
$sql = "insert into imgs(title,laiyuan,des,date,author,url)values('$title','$source','$des','$date','$author','$url')";//前面没有看到对变量的转义操作
echo $sql; //请贴出来
try
{
if(mysql_db_query($dbname,$sql))
{
echo "aaaaaaaaaaaaaaaaaaaaaaaaaaa";
}
}catch(Exception $e)
{
echo $e->getMessage(); //请帖出来
}
dahuang001 2011-08-10
  • 打赏
  • 举报
回复
有可能是少一个空格什么的
kyzy_yy_pm 2011-08-10
  • 打赏
  • 举报
回复
$sql = "insert into imgs(title,laiyuan,des,date,author,url)values('$title','$source','$des','$date','$author','$url')";
echo $sql; //这个能够输出吗,如果不能的话你看看上传文件那不是不是没上传了,如果是的话估计是服务器中的环境限制的内存有点小
码无边 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 swordphp 的回复:]

可以试试看能不能把mysql_pconnect换成mysql_connect
长连接可能导致mysql过多的连接数是myql不被允许的.
并且数据库如果因为某些原因锁定了你只能重启.
以下摘自PHP中文手册.
//----------------------------------------------------
数据库永久连接
永久的数据库连接是指在脚本结束运行时不关闭的连接……
[/Quote]


上面的大哥是来忽悠分数的吧!这根连接有什么关系呢?呵呵

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧