首页 > 编程技术 > php

php调用mysql存储过程返回结果集

发布时间:2016-11-25 16:08

 最近开发一个项目,用到这个,记一下:

关键就是两点

1 define('CLIENT_MULTI_RESULTS', 131072);
2 
3 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());

下面就可以正常使用了,以下是例子程序。

 1 <?php
 2     define('CLIENT_MULTI_RESULTS', 131072);
 3 
 4     $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
 5     mysql_select_db("vs") or die("Could not select database");
 6 ?>
 7 
 8 <?php
 9         $result = mysql_query("call get_news_from_class_id(2)") or die("Query failed:" .mysql_error());
10         while($row = mysql_fetch_array($result, MYSQL_ASSOC))
11         {
12                 $line = '<tr><td><a target = _blank href=''.$row["url"].''>'.$row["title"].'('.$row["page_time"].')'.'</a></td></tr>';
14                 echo $line;
15                 printf("n");
16 
17         }
18         mysql_free_result($result);
19 ?>
20 
21 <?php
22     mysql_close($link);
23 ?>

< <HTML>
<HEAD>
<TITLE> php调用js文件的好办法</TITLE>
</HEAD>
<BODY>
<scrīpt language=''javascrīpt'' type=''text/javascrīpt''" width=100% src=''test.php''></scrīpt>
<scrīpt>
ok("aaaaaa!");
</scrīpt>
</BODY>
</HTML>


test.php:

<?php
echo "
function ok(msg){
alert(msg);
}
";
?>

  当我们使用下面的PHP语句发送中文电子邮件的时候,会发现邮件的标题是乱码,而邮件正文却是正确的,如何才能使得邮件标题不是乱码呢?

  $subject = stripslashes($the_post[''Title'']);
  $headers = "MIME-Version: 1.0rn";
  $headers .= "Content-type: text/plain; charset=utf-8rn";
  $headers .= "Content-Transfer-Encoding: 8bitrn";
  $message = stripslashes(strip_tags($the_post[''Content'']));
  mail($to, $subject, $message, $headers);

  先用函数base64_encode() — 使用 MIME base64 对数据进行编码
  标题字符串前加编码类型例如: =?UTF-8?B?
  标题字符串后加:?=

  例如:

  $subject = "=?UTF-8?B?".base64_encode($subject)."?=";

  将上面一句添加到代码之中,这样,发送的中文邮件标题就不是乱码了。

 

  1. 简单邮件发送
  PHP函数库中有一个mail函数,可以用来进行简单的邮件发送,函数原型为:
  boolean mail(string $to, string $subject, string $message, string [$additional]);
  $to指定邮件寄送地址,$subject指定邮件标题,$message指定邮件内容,$additional指定邮件的附加头部,例如:
  
  
复制PHP内容到剪贴板
PHP代码:
  <?php
  mail( "ywg_263@263.net", "message from php", "hello, xiaoyz! " );
  ?>
  就可以向 ywg_263@263.net发送一个标题为“message from php” 内容为“hello, xiaoyz!”的邮件,其中的邮件接受人$to可以是多个邮件地址,也就是说可以同时给多个人发送同一份邮件,邮件地址之间用逗号分隔,示例如下:
  
  
复制PHP内容到剪贴板
PHP代码:
  <?php
  $emails = Array( "xiaoyz@birdy.dhs.org", "xiaoyz@hotmail.com" );
  mail( implode(",", $emails), "message from php", "hello, xiaoyz!" );
  ?>
  笔者做过的论坛程序中的注册部分就曾经使用过这种方法,不过最后还是采用了一种变通的形式,下文将会具体讲到。其中主要的需求是:当一个用户注册之后,必须得到组管理员的身份确认才能成为论坛的正式会员,我所采用的方法是:用户注册完成提交表单时,先把用户各种注册信息写入数据库,同时把用户的必要信息通过邮件的方式发送给用户所注册组的所有组管理员(如果没有组管理员的话,会给站管理员发送邮件,并告之该组没有组管理员),当然,读者可能会觉得如果有人恶意注册了很多id的话是否会在数据库中造成很多垃圾信息呢?这种考虑是必要的,所以我们需要给出一个策略,提供一个管理界面,来剔除掉这些垃圾,一种简单的方法就是对于超过了给定时期还没有成为正式会员的id一律删除,前提就是必须保证组管理员要在给定时期之内审批这些id,否则会造成误删。读者可以试试上面的代码能否工作,如果没有发送成功,请考虑重新配置邮件服务器的smtp服务。好了,按照上述形式发送的邮件将只是简单的文本形式,如果希望发送一个HTML形式的邮件,就需要知道如何发送MIME形式的邮件了。
  2. MIME邮件发送
  MIME(Multi-purpose Internet Mail Extensions,多用途Internet邮件扩展) 协议扩展了基于文本的Internet邮件系统,以便可以在消息体中包含二进制附件。MIME信息由正常的Internet文本邮件组成,在文本邮件中包含了一些信息头和格式化过的信息体(用ASCII 码子集表示的附件),这些MIME信息头给出了在邮件中表示附件的特定方法。
  刚才通过mail函数发送的邮件接受之后的MIME信息如下(其中的localhost
  (localhost[127.0.0.1])表示采用本机上的postfix提供的smtp服务,userid 48表示apache):
  [code]
  Received: from localhost (localhost [127.0.0.1])
  by mx01.263.net (Postfix) with SMTP id E7C8B1DC38A78
  for <ywg_263@263.net>; Sat, 8 Dec 2001 20:08:45 +0800 (CST)
  Received: by birdy.dhs.org (Postfix, from userid 48)
  id 706F3C4923A; Sun, 9 Dec 2001 03:52:26 +0800 (CST)
  T ywg_263@263.net
  Subject: message from php
 

1:为什么我得不到变量

  我在一网页向另一网页POST数据name,为什么输出$name时却得不到任何值?
  在PHP4.2以后的版本中register_global默认为off
  若想取得从另一页面提交的变量:

  方法一:在PHP.ini中找到register_global,并把它设置为on.
  方法二:在接收网页最前面放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()).
  方法三:一个一个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种方法虽然麻烦,但比较安全.

  2:调试你的程序

  在运行时必须知道某个变量为何值。我是这样做的,建立一文件debug.php,其内容如下:

  PHP代码:

PHP
  <?PHP
  Ob_Start();
  Session_Start();
  Echo "<pre>";

  Echo "本页得到的_GET变量有:";
  Print_R($_GET);

  Echo "本页得到的_POST变量有:";
  Print_R($_POST);

  Echo "本页得到的_COOKIE变量有:";
  Print_R($_COOKIE);

  Echo "本页得到的_SESSION变量有:";
  Print_R($_SESSION);

  Echo "</pre>";
  ?>

  然后在php.ini中设置:include_path = "c:/php",并将debug.php放在此文件夹,以后就可以在每个网页里包含此文件,查看得到的变量名和值.

  3:如何使用session

  凡是与session有关的,之前必须调用函数session_start();

  为session付值很简单,如:

  PHP代码:

  <?php
  Session_start();
  $Name = "这是一个Session例子";
  Session_Register("Name");//注意,不要写成:Session_Register("$Name");
  Echo $_SESSION["Name"];
  //之后$_SESSION["Name"]为"这是一个Session例子"
  ?>

  在php4.2之后,可以为session直接付值:

  PHP代码:

PHP
  <?PHP
  Session_Start();
  $_SESSION["name"]="value";
  ?>

取消session可以这样:

PHP代码:

<
标签:[!--infotagslink--]