Skip navigation.

flying in the way of my own...

Posts tagged with "mysql"

php+mysql中文乱码的解决<br/>

, ,

学会了怎么用php+mysql来创建到态页面,今天才真正的用了一下。不过在用的时候却又来的新的问题,在php中提交的数据,在mysql中显示的全都是乱码。于是就google了一下,在PHP与MySQL开发中页面乱码的产生与解决这篇文章中看到要在连接数据库以后,再加一句
mysql_query("SET NAMES UTF8"); 
来设定php与mysql间数据传输的编码,不过这样设置了以后还是不行,乱码变成了一个个的小“?”,直接用phpMyAdmin创建了一个包含中文的项,发现也是乱码,于是知道了问题不是出在了php中。经过了一段检查发现,我创建的表的字符集是latin1,不过我也不知道怎么把它改成utf8的,就直接在phpMyAdmin里面创建了一个,phpMyAdmin显示所使用的query是
CREATE DATABASE $dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
这种格式的,所以明白了是在创建数据库的时候要把数据库的碥码也设置好,而之后在创建表,项的时候就不用指定了,因为它们会从上一级继承。

php+mysql简介(三)

, ,

在前两篇简介中以经介绍了怎么用php和mysql数据库交互,不过那些在实际应用中还是不够的,下面就继续介绍一些新的东西。
有时我们在选择数据库中的数据时并不想把所有的都选择出来,比如在我们前面建立的contacts表中,如果只想选出first name为john的联系人,就可以用这个语句:
SELECT * FROM contacts WHERE first='john'

更有趣的是,我们甚至可以用一个变量来代替john,这也就是说我们可以在网站中让用户来选择想要查看的内容来进行选择。
同时,我们还可能对输出的顺序有一定的要求,比如想让我们的联系人按照last name的升序排列,就可以这样:
SELECT * FROM contacts ORDER BY last ASC

其中的ASC是Ascending(升序)的缩写,如果想用降序排列,可以把ASC换成DESC(Descending) 。

有时候,我们需要对数据库中的内容进行一些更新,比如我们的朋友换了电话,在我们的contacts表中就要更新他的电话号码,当然,这可以交给他自己去做,他想改的不一定只是电话号码(可能他已经搬家了也说不定)。这可以做成一个页面,由用户去修改内容并提交:
<form action="updated.php" method="post">
<input type="hidden" name="ud_id" value="<? echo $id; ?>">
First Name: <input type="text" name="ud_first" value="<? echo $first; ?>"><br>
Last Name: <input type="text" name="ud_last" value="<? echo $last; ?>"><br>
Phone Number: <input type="text" name="ud_phone" value="<? echo $phone; ?>"><br>
Mobile Number: <input type="text" name="ud_mobile" value="<? echo $mobile; ?>"><br>
Fax Number: <input type="text" name="ud_fax" value="<? echo $fax; ?>"><br>
E-mail Address: <input type="text" name="ud_email" value="<? echo $email; ?>"><br>
Web Address: <input type="text" name="ud_web" value="<? echo $web; ?>"><br>
<input type="Submit" value="Update">
</form>

当然,这只是网页,真正起做用的还是我们的php,update.php可以写成这样:
$ud_id=$_POST['ud_id'];
$ud_first=$_POST['ud_first'];
$ud_last=$_POST['ud_last'];
$ud_phone=$_POST['ud_phone'];
$ud_mobile=$_POST['ud_mobile'];
$ud_fax=$_POST['ud_fax'];
$ud_email=$_POST['ud_email'];
$ud_web=$_POST['ud_web'];

$username="username";
$password="password";
$database="your_database";
mysql_connect(localhost,$username,$password);


$query="UPDATE contacts SET first='$ud_first', last='$ud_last', phone='$ud_phone', mobile='$ud_mobile', fax='$ud_fax', email='$ud_email', web='$ud_web' WHERE id='$ud_id'";
mysql_query($query);
echo "Record Updated";
mysql_close();

这其中最关键的一句就是这个:
$query = "UPDATE contacts SET first = '$ud_first', last = '$ud_last', phone = '$ud_phone', mobile = '$ud_mobile', fax = '$ud_fax', email = '$ud_email', web = '$ud_web' WHERE id = '$ud_id'";

这是实际修改的语句,从此可以看出更新的语法是这样的:
UPDATE tablename SET ...


还有时候,我们想删除掉数据库的内容,就可以通过下面的语句来实现:
DELETE FROM contacts WHERE id='$id'

这句可以删除id是$id的联系人。

当我们的数据库非常庞大时,搜索是必不可少的功能,这也是可以通过php+mysql来实现。它的语法是这样的:
SELECT * FROM tablename WHERE fieldname LIKE '%$string%'

其中%是通配符,上面的%$string%就是搜索fieldname中包含$string的记录,而$string%则表示以$string开头,%$string以$string结尾。

以上的东西已经把php+mysql来制作动态网页的基本内容都介绍了,相信读过的朋友应该可以开始动手建站了。我也是第一次接触这些内容,所以难免有不正确的地方,所以希望能抽出宝贵时间读这些小文章的朋友发现问题及时指出,我们可以共同进步。我也要开始去动手了。

本文参考了
Part 5 - More Outputs
Part 6 - Single Records & Error Trapping
Part 7 - Updating & Deleting
Part 8 - Finishing The Script

php+mysql简介(二)

, ,

前一阵子写了php+mysql简介(一),之后一阵子就有些忙了,一直没有时间写以后的东西。现在在帮同学做一个网站,正好也需要这一方面的内容,所以就抽个空把这个写完吧,当再复习一遍。下面言归正传。

当我们创建了表以后,下一步要做的就是往里面添加内容了。这可以通过插入操作来完成。当我们要向一个名叫tablename的表里面添加一个记录,它的格式就是这样的:
INSERT INTO tablename VALUES

举个具体的例子,要向上一篇中创建的那个表contacts里面添加一个联系人,就可以用下面这个query
$query = "INSERT INTO contacts VALUES ('','John','Smith','01234 567890','00112 334455','01234 567891','johnsmith@gowansnet.com','http://www.gowansnet.com')";

注意这里的一个问题,contacts里面记录的第一项id,我们在创建时用了一个参数是Auto Increment,也就是说我们在插入一个记录时不用指定这一项的值,而mysql会自动选择下一个可以使用的值,就所以这个query里面第一个参数只是用了个''。

在插入了一定的信息后,我们就可以在我们的php页面上来输出数据库中的内容了。这个操作可以按以下步骤来实现。
首先,需要把表中的内容读出来,放到一个变量里面,比如我们要选取表tablename中的所有信息就可以这样:
SELECT * FROM contacts

还是用那个contacts的例子,我们从contacts表中读出数据并把它们存入result变量中,可以这样:
$query="SELECT * FROM contacts";
$result=mysql_query($query);

而这样只是存到了result变量,它是不能直接输出的,要想得到数据,还要继续,就是先要知道一个选择了多少行。
$num=mysql_numrows($result);

这样,就把行数存到了num变量中。
下面我们就可以得到每一个数据了。这可以用一个循环来实现:
$i=0;
while ($i < $num) {

$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");

$i++;
}

这里的语法是这样的,要把第i个记录的fieldname字段的内容存到variable,可以这样
$variable=mysql_result($result,$i,"fieldname");


最后,当我们执行完对数据库的操作后,还要断开与数据库的连接:
mysql_close();


本段参考了文章
Part 3 - Inserting Information
Part 4 - Displaying Data

php+mysql简介 (一)

, , ,

众所周知,php语言一个很大的特点就是可以连接数据库并且进行数据库的操作。而这里最合适的数据库非开源的mysql莫属。这是我在今天的学习过程中所总结的认为重要的东西。

要想使用php进行mysql的数据库操作,首先需要与数据库连接,这里php中的语句是

mysql_connect(host,user,password);


这里的host就是指数据库所在的位置,通常来说我们都是将mysql和apache安装在同一台机器上的,所以这里的host也通常就是localhost;user则是用来登录数据库的用户名,password就当然是密码了。举个例子,比如在用一个叫a的用户名,他的密码是b来登录服务器上的mysql数据库,所用的语句应该是

mysql_connect(localhost,a,b);


连接好数据库系统以后,我们先要创建我们需要的数据库。在php中,一般对mysql进行操作都是通过mysql_query(query)进行的。这里的query(请求)不同,所进行的操作也就不同了。创建数据库的query是这样的:

$query="CREATE DATABASE dbname"

其中的dbname就是我们要创建的数据库的名字。

当我们有了要进行操作数据库后,还要先选择它,它是通过这个语句来完成的

@mysql_select_db(database) or die( "Unable to select database");


database是我们要选择的数据库,die( "Unable to select database")则是用来说明,如果选择不成功,就退出并反馈信息Unable to select database。

当选择好数据库以后,我们要做的第一件事当然就是新建一个表了(否则我们的数据存在哪里呀)。对于表中的字段,有几种常用的类型,下面分别介绍一下:

TININT      比较小的整数
SMALLINT          比较小的整数
MEDIUMINT         整数
INT               整数
VARCHAR           文本(不超过256个英文字母)
TEXT              文本



创建数据库的query的格式是这样的

CREATE TABLE tablename (

Fields

)


tablename就是要创建的表的名称,Fields就是所包含的字段,它是这样定义的:

fieldname type(length) extra info


这里fieldname就是名称,type是上面提到的类型,length则是这个field的长度,extra info就是其它信息,一般情况如查没有附加信息的话就可以写NOT NULL,还有一种比较特殊的信息是这样的auto_increment,它表示在向表中添加信息的里候,这个field可以不填,而是自动选取下一个可用的值。举个例子

$query="CREATE TABLE contacts (id int(6) NOT NULL auto_increment,first varchar(15) NOT NULL,last varchar(15) NOT NULL,phone varchar(20) NOT NULL,mobile varchar(20) NOT NULL,fax varchar(20) NOT NULL,email varchar(30) NOT NULL,web varchar(30) NOT NULL,PRIMARY KEY (id),UNIQUE id (id),KEY id_2 (id))";


就是把这个创建表的query放到变量query中,以便在之后的程序中使用。

本文参考了
PHP/MySQL Tutorial Part 2 - Setting Up The Database
Connect to MySQL Database
两篇文章。由于本人没有正规地学过数据库方面的知识,如有术语使用不正确或者有其它错误,请留言指出,谢谢。

在Arch Linux设置apache+mysql+php

, ,

没有接触这些东西的时候觉得这些都特别深奥,不过这次不得已而接触了以后,发现在arch linux上搭建这样一个环境还是不算因难的。
首先是apache,其实在httpd.conf这个文件里面注释的已经很清楚了,也没有必要多说了。就是设置一下默认的目录(DocumentRoot),还有字符集(LanguagePriority,AddDefaultCharset等),还有IP和端口(Listen)之类的。
其次是php,这个也不难,也是修改httpd.conf,加入这些(或者去掉这些行前面的#符号,这个是好久前弄的了,记不太清了):
LoadModule php5_module          lib/apache/libphp5.so

<IfModule mod_php5.c>
  DirectoryIndex index.php index.html
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
</IfModule>

最后是mysql,这个我不是很确定是怎么弄的,在网上看的一些文章一点一点试的时候就给好了,应该是在php.ini里面把这一行去掉前面的";"号就行了:
;extension=mysql.so(windows用户的话则是;extension=php_mysql.dll


编缉index.html放到在httpd.conf里面定义的DocumentRoot路径,然后在浏览器里面输入http://localhost,如果输出了一大段信息,就是php成功安装和配置了,如果有一段关于mysql的描述(不是编绎选项),那么mysql也已经成功安装。

要起动的话,只要运行/etc/rc.d/httpd start和/etc/rc.d/mysqld start就行了。
如果想开机起动的话,只需把httpd和mysqld加到/etc/rc.conf的DAEMONS里面就行了。
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31