Mysqli 操作数据库,mysqli操作数据库
每次用到mysql_connect连接数据库的时候都会提示:
<span>1</span> Deprecated: <span>mysql_connect</span>(): The <span>mysql</span> extension is deprecated and will be removed in the future: <span>use</span> mysqli or PDO instead in E:\wamp\www\myquote\includes\<span>mysql_connect</span>.php on line 5
作为一个高要求高完美的男人,实在受不了这提示。躲着他也不行——解决他心里的小石头才能碎掉
那么就先学习下使用Mysqli操作数据库:
1. 与Mysql数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库,以及最后关闭连接。与Mysql几乎所有的特性一样,这一点可以使用面向对象的方法来完成,也可以采用过程的方式完成。
1.1 创建一个Mysqli的对象
<span>1</span> <?<span>php </span><span>2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span>3</span> ?>
1.2 连接Mysql的主机、用户、密码、数据库
<span>1</span> <?<span>php </span><span>2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span>3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span>4</span> ?>
1.3 创建连接参数的Mysqli对象
<span>1</span> <?<span>php </span><span>2</span> <span>$mysqli</span>=<span>new</span> mysqli('localhost','root','admin','test');<span>//</span><span>实例化mysqli </span><span>3</span> <span>//$mysqli->connect('localhost','root','admin','test');</span> <span>4</span> ?>
1.4 更换默认连接的数据库
<span>1</span> <?<span>php </span><span>2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span>3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span>4</span> <span>$mysqli</span>->select_db('abc');<span>//</span><span>更换连接默认的数据库为abc数据库</span> <span>5</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>6</span> ?>
2 处理连接错误
2.1 如果无法连接Mysql数据库,那么这个页面不太可能继续完成预期的工作,因此,一定要注意监视连接错误并相应地做出反应。Mysqli拓展包含有很多特性可以用来抓取错误信息,例如:mysqli_connect_errno() 和 mysqli_connect_error()方法。
<span>1</span> <span>mysqli_connect_errno</span><span>()函数返回链接数据库返回的错误号。 </span><span>2</span> <span>mysqli_connect_error</span><span>()函数返回连接数据库返回的错误代码。</span>
使用方法:
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>echo</span>'数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>(); </span><span> 6</span> <span>exit</span><span>(); </span><span> 7</span> }<span>else</span><span>{ </span><span> 8</span> <span>echo</span> '数据库连接成功'<span>; </span><span> 9</span> <span>} </span><span>10</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>11</span> ?>
这里用了面向过程的方法来判断数据库是否连接成功。那么为什么不用面向对象的方法判断呢?我的理解是 判断数据库连接成功 之前首先要证明你要实例化的对象是否可用。。所以用了面向过程的方法来判断。(如果有不对的地方大家也可以一起讨论讨论,我自己也是个小学渣)
2.2 mysqli_error——返回数据库操作错误信息。mysqli_errno——返回数据库操作错误代码
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>echo</span>'数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>(); </span><span> 6</span> <span>exit</span><span>(); </span><span> 7</span> }<span>else</span><span>{ </span><span> 8</span> <span>echo</span> '数据库连接成功<br/>'<span>; </span><span> 9</span> <span>} </span><span>10</span> <span>if</span> (!<span>$mysqli</span>->query("SET a=1")) {<span>//</span><span>$mysqli->query()执行sql语句</span> <span>11</span> <span>echo</span> "错误信息是: ".<span>$mysqli</span>->error.'<br/>'<span>; </span><span>12</span> <span>echo</span> "错误代码是: ".<span>$mysqli</span>-><span>errno; </span><span>13</span> <span>} </span><span>14</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>15</span> ?>
输出:
数据库连接成功
错误信息是: Unknown system variable 'a'
错误代码是: 1193
3 与数据库进行交互。
① 绝大多数查询都与创建(Creation)、获取(Retrieval)、更新(Update)和删除(Deletion)任务有关,这些任务统称为CRUD。
② 获取数据网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span> 8</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span> 9</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>10</span> <span>print_r</span>(<span>$result</span>->fetch_row());<span>//</span><span>将结果集的第一行输出</span> <span>11</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>12</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>13</span> ?>
输出:
Array ( [0] => 1 [1] => 秋田嘉 [2] => 123456 )
3.1 解析查询结果
一旦执行了查询并准备好结果集,下面就可以解析获取到的结果行了。你可以使用多个方法来获取各行中的字段,具体选择哪一个方法主要取决于个人喜好,因为只是引用字段的方法有所不同。
3.1.1 将结果集放到对象中由于你可能会使用mysqli的面向对象的语法,所以完全可以采用面向对象的方式管理结果集。
可以使用 fetch_object() 方法来完成。
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span> 8</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span> 9</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>10</span> <span>/*</span> <span>11</span> <span>$row = $result->fetch_object();//将结果集包装成对象 </span><span>12</span> <span>echo $row->user;//输出对象中的一个字段(属性) </span><span>13</span> <span>*/</span> <span>14</span> <span>while</span> (!!<span>$row</span> = <span>$result</span>->fetch_object()){<span>//</span><span>//遍历所有的用户名称</span> <span>15</span> <span>echo</span> <span>$row</span>->user."<br>"<span>; </span><span>16</span> <span>var_dump</span>(<span>$row</span><span>); </span><span>17</span> <span>} </span><span>18</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>19</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>20</span> ?>
输出:
秋田嘉
object(stdClass)#3 (3) { ["id"]=> string(1) "1" ["user"]=> string(9) "秋田嘉" ["psw"]=> string(6) "123456" }
刘德华
object(stdClass)#4 (3) { ["id"]=> string(1) "2" ["user"]=> string(9) "刘德华" ["psw"]=> string(6) "654321" }
3.1.2 使用索引数组和关联数组 fetch_array();
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span> 8</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span> 9</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>10</span> <span>11</span> <span>$row</span> = <span>$result</span>->fetch_array();<span>//</span><span>将结果集包装成数组(索引+关联)</span> <span>12</span> <span>echo</span> <span>$row</span>[1].'<br/>';<span>//</span><span>输出下标是1的字段(属性)</span> <span>13</span> <span>var_dump</span>(<span>$row</span><span>); </span><span>14</span> <span>/*</span> <span>15</span> <span>while (!!$row = $result->fetch_array()){//遍历全部 </span><span>16</span> <span>echo $row[1]."<br/>"; </span><span>17</span> <span>}</span><span>*/</span> <span>18</span> <span>19</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>20</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>21</span> ?>
输出:
秋田嘉
array(6) { [0]=> string(1) "1" ["id"]=> string(1) "1" [1]=> string(9) "秋田嘉" ["user"]=> string(9) "秋田嘉" [2]=> string(6) "123456" ["psw"]=> string(6) "123456" }
3.1.3 使用索引数组 fetch_row();
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span> 8</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span> 9</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>10</span> <span>$row</span> = <span>$result</span>->fetch_row();<span>//</span><span>将结果集包装成索引数组</span> <span>11</span> <span>echo</span> <span>$row</span>[2<span>]; </span><span>12</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>13</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>14</span> ?>
输出:
123456
3.1.4 使用关联数组 fetch_assoc();
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span> 8</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span> 9</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>10</span> <span>$row</span> = <span>$result</span>->fetch_assoc();<span>//</span><span>将结果集包装成关联数组</span> <span>11</span> <span>echo</span> <span>$row</span>['psw'<span>]; </span><span>12</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>13</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>14</span> ?>
输出:
123456
4 确定所选择的行和受影响的行
通常希望能够确定SELECT查询返回的行数,或者受INSERT、UPDATE或DELET查询影响的行数。
我们可以使用num_rows和affected_rows两个属性
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span> 8</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span> 9</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>10</span> <span>echo</span> <span>$result</span>->num_rows;<span>//</span><span>当使用查询时,想了解SELECT查询了多少行,可以使用num_rows。</span> <span>11</span> <span>echo</span>"<br/>"<span>; </span><span>12</span> <span>echo</span> <span>$mysqli</span>->affected_rows;<span>//</span><span>当使用查询时,想了解SELECT、INSERT、UPDATE、DELETE查询时影响的行数,可以使用affected_rows;注意,它是$mysqli下的属性</span> <span>13</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>14</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>15</span> ?>
输出:
2
2
5 移动指针的操作和获取字段
当你并不想从第一条数据开始获取,或者并不想从第一个字段获取,你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。当然,你还可以获取字段的名称及其相关的属性
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span> 8</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span> 9</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>10</span> <span>echo</span> <span>$result</span>->field_count;<span>//</span><span>计算有多少条字段</span> <span>11</span> <span>echo</span>"<br/>";<span>//</span><span>输出 3</span> <span>12</span> <span>$field</span> = <span>$result</span>->fetch_field();<span>//</span><span>获取字段的名称</span> <span>13</span> <span>echo</span> <span>$field</span>->name;<span>//</span><span>输出id</span> <span>14</span> <span>echo</span> '<br/>'<span>; </span><span>15</span> <span>while</span> (!!<span>$field</span> = <span>$result</span>->fetch_field()) {<span>//</span><span>遍历字段</span> <span>16</span> <span>echo</span> <span>$field</span>->name.'<br />'<span>; </span><span>17</span> <span>} </span><span>18</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>19</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>20</span> ?>
输出:
3
id
user
psw
5.1
<?<span>php </span><span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); } </span><span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码</span> <span>$sql</span>='select * from user';<span>//</span><span>创建一句SQL语句</span> <span>$result</span>=<span>$mysqli</span>->query(<span>$sql</span>);<span>//</span><span>执行sql语句把结果集赋给$result</span> <span>print_r</span>(<span>$result</span>->fetch_fields());<span>//</span><span>一次性取得字段数组</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> ?>
输出:
<span> 1</span> <span>Array</span> <span> 2</span> <span>( </span><span> 3</span> [0] => stdClass <span>Object</span> <span> 4</span> <span> ( </span><span> 5</span> [name] =><span> id </span><span> 6</span> [orgname] =><span> id </span><span> 7</span> [table] =><span> user </span><span> 8</span> [orgtable] =><span> user </span><span> 9</span> [def] => <span>10</span> [db] =><span> test </span><span>11</span> [catalog] =><span> def </span><span>12</span> [max_length] => 1 <span>13</span> [length] => 11 <span>14</span> [charsetnr] => 63 <span>15</span> [flags] => 49667 <span>16</span> [type] => 3 <span>17</span> [decimals] => 0 <span>18</span> <span> ) </span><span>19</span> <span>20</span> [1] => stdClass <span>Object</span> <span>21</span> <span> ( </span><span>22</span> [name] =><span> user </span><span>23</span> [orgname] =><span> user </span><span>24</span> [table] =><span> user </span><span>25</span> [orgtable] =><span> user </span><span>26</span> [def] => <span>27</span> [db] =><span> test </span><span>28</span> [catalog] =><span> def </span><span>29</span> [max_length] => 9 <span>30</span> [length] => 765 <span>31</span> [charsetnr] => 33 <span>32</span> [flags] => 4097 <span>33</span> [type] => 253 <span>34</span> [decimals] => 0 <span>35</span> <span> ) </span><span>36</span> <span>37</span> [2] => stdClass <span>Object</span> <span>38</span> <span> ( </span><span>39</span> [name] =><span> psw </span><span>40</span> [orgname] =><span> psw </span><span>41</span> [table] =><span> user </span><span>42</span> [orgtable] =><span> user </span><span>43</span> [def] => <span>44</span> [db] =><span> test </span><span>45</span> [catalog] =><span> def </span><span>46</span> [max_length] => 6 <span>47</span> [length] => 765 <span>48</span> [charsetnr] => 33 <span>49</span> [flags] => 4097 <span>50</span> [type] => 253 <span>51</span> [decimals] => 0 <span>52</span> <span> ) </span><span>53</span> <span>54</span> )
5.2
<span>1</span> <span>$result</span>->data_seek(1);<span>//</span><span>移动数据指针</span> <span>2</span> <span>$result</span>->field_seek(1);<span>//</span><span>移动字段指针</span>
6 执行多条SQL语句
有的时候,我们需要在一张页面上同时执行多条SQL语句,之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。 PHP提供了执行多条SQL语句的方法$mysqli->multi_query();
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码 </span><span> 8</span> <span>//创建多条SQL语句</span> <span> 9</span> <span>$sql</span> .= "SELECT * FROM user;"<span>; </span><span>10</span> <span>$sql</span> .= "SELECT * FROM photo;"<span>; </span><span>11</span> <span>$sql</span> .= "SELECT * FROM article"<span>; </span><span>12</span> <span>if</span> (<span>$mysqli</span>->multi_query(<span>$sql</span>)) {<span>//</span><span>开始执行多条SQL语句</span> <span>13</span> <span>$result</span> = <span>$mysqli</span>-><span>store_result(); </span><span>14</span> <span>print_r</span>(<span>$result</span>->fetch_array());<span>//</span><span>开始获取第一条SQL语句的结果集</span> <span>15</span> <span>$mysqli</span>->next_result();<span>//</span><span>将结果集指针移到下一个</span> <span>16</span> <span>$result</span> = <span>$mysqli</span>-><span>store_result(); </span><span>17</span> <span>print_r</span>(<span>$result</span>-><span>fetch_array()); </span><span>18</span> <span>$mysqli</span>-><span>next_result(); </span><span>19</span> <span>$result</span> = <span>$mysqli</span>-><span>store_result(); </span><span>20</span> <span>print_r</span>(<span>$result</span>-><span>fetch_array()); </span><span>21</span> } <span>else</span><span> { </span><span>22</span> <span>echo</span> 'sql语句有误!'<span>; </span><span>23</span> <span>} </span><span>24</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>25</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>26</span> ?>
7 执行数据库事务
事务(transaction)是作为整个一个单元的一组有序的数据库操作。如果一组中的所有操作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚(roll back),该事务所有操作的影响都将取消。首先,您的MySQL是InnoDB或BDB引擎的一种,一般来说,你安装了AppServ的集成包,你选择InnoDB的引擎的数据库即可。如果你建立的表不是InnoDB,可以在phpmyadmin里修改
<span> 1</span> <?<span>php </span><span> 2</span> <span>$mysqli</span>=<span>new</span> mysqli();<span>//</span><span>实例化mysqli</span> <span> 3</span> <span>$mysqli</span>->connect('localhost','root','admin','test'<span>); </span><span> 4</span> <span>if</span>(<span>mysqli_connect_error</span><span>()){ </span><span> 5</span> <span>exit</span>('数据库连接错误,错误信息是.'.<span>mysqli_connect_error</span><span>()); </span><span> 6</span> <span>} </span><span> 7</span> <span>$mysqli</span>->set_charset("UTF8");<span>//</span><span>设置数据库编码 </span><span> 8</span> <span>//首先你必须关闭自动提交数据</span> <span> 9</span> <span>$mysqli</span>->autocommit(<span>false</span><span>); </span><span>10</span> <span>//</span><span>创建一个SQL语句,必须同时运行成功,不能出现一个成功,一个失败</span> <span>11</span> <span>$sql</span> .= "UPDATE `friend` SET state=state+5 WHERE id=1;"<span>; </span><span>12</span> <span>$sql</span> .= "UPDATE `flower` SET tg_flower=flower-5 WHERE id=1;"<span>; </span><span>13</span> <span>//</span><span>执行两条SQL语句</span> <span>14</span> <span>if</span> (<span>$mysqli</span>->multi_query(<span>$sql</span><span>)) { </span><span>15</span> <span>//</span><span>获取第一条SQL一影响的行数</span> <span>16</span> <span>$success</span> = <span>$mysqli</span>->affected_rows == 1 ? <span>true</span> : <span>false</span><span>; </span><span>17</span> <span>//</span><span>下移,第二条SQL</span> <span>18</span> <span>$mysqli</span>-><span>next_result(); </span><span>19</span> <span>//</span><span>获取第二条SQL影响的行数</span> <span>20</span> <span>$success2</span> = <span>$mysqli</span>->affected_rows == 1 ? <span>true</span> : <span>false</span><span>; </span><span>21</span> <span>//</span><span>判断是否都正常通过了,两个SQL</span> <span>22</span> <span>if</span> (<span>$success</span> && <span>$success2</span><span>) { </span><span>23</span> <span>$mysqli</span>-><span>commit(); </span><span>24</span> <span>echo</span> '完美提交!'<span>; </span><span>25</span> } <span>else</span><span> { </span><span>26</span> <span>$mysqli</span>-><span>rollback(); </span><span>27</span> <span>echo</span> '程序出现异常!'<span>;} </span><span>28</span> } <span>else</span><span> { </span><span>29</span> <span>echo</span> "SQL语句有误:".<span>$mysqli</span>->errno.<span>$mysqli</span>-><span>error; </span><span>30</span> <span>} </span><span>31</span> <span>//</span><span>最后还必须开启自动提交</span> <span>32</span> <span>$mysqli</span>->autocommit(<span>true</span><span>); </span><span>33</span> <span>$result</span>->free();<span>//</span><span>释放查询内存(销毁)</span> <span>34</span> <span>$mysqli</span>->close();<span>//</span><span>别忘了关闭你的"小资源";</span> <span>35</span> ?>

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中