ホームページ >バックエンド開発 >PHPチュートリアル >Mysqli はデータベースを操作します。mysqli はデータベースを操作します_PHP チュートリアル
mysql_connect を使用してデータベースに接続するたびに、プロンプトが表示されます:
リーリー高い基準と高い完璧さを持つ男として、私はこの思い出に本当に耐えられません。彼から隠れることさえできない - 彼の心の中の小さな石を解決することによってのみ
それでは、まず Mysqli を使用してデータベースを操作する方法を学びましょう:
1. Mysql データベースと対話する場合は、最初に接続を確立し、最後に接続を切断する必要があります。これには、サーバーへの接続とデータベースの選択、そして最後に接続の終了が含まれます。 MySQL のほぼすべての機能と同様、これはオブジェクト指向アプローチまたは手続き型アプローチを使用して実現できます。
1.1 Mysqliオブジェクトを作成する
リーリー1.2 Mysqlホスト、ユーザー、パスワード、データベースを接続
リーリー1.3 接続パラメータのMysqliオブジェクトを作成する
リーリー1.4 デフォルトの接続データベースを変更します
リーリー2接続エラーの処理
2.1 MySQL データベースに接続できない場合、このページが意図した仕事を継続する可能性は低いため、必ず接続エラーを監視し、それに応じて対応してください。 Mysqli 拡張機能には、mysqli_connect_errno() メソッドや mysqli_connect_error() メソッドなど、エラー情報を取得するために使用できる多くの機能が含まれています。
リーリー使用方法:
リーリー
ここでは、データベース接続が成功したかどうかを判断するためにプロセス指向の方法が使用されます。では、オブジェクト指向の手法を使って判断してみてはいかがでしょうか。私の理解では、データベース接続が成功したかどうかを判断する前に、インスタンス化したいオブジェクトが利用可能かどうかをまず証明する必要があります。 。したがって、プロセス指向のアプローチが判断に使用されます。 (何かあった場合は一緒に相談しましょう。私も小学生のクズです)
2.2 mysqli_error—データベース操作のエラー情報を返します。 mysqli_errno——データベース操作エラーコードを返す
リーリー出力:
データベース接続に成功しました
エラー メッセージは次のとおりです: 不明なシステム変数 'a' です
エラー コードは次のとおりです: 1193
3 データベースと対話します。
① クエリの大部分は、作成 (Creation)、取得 (Retrieval)、更新 (Update)、削除 (Deletion) タスクに関連しており、これらを総称して CRUD と呼びます。
② データの取得 Web プログラムの作業のほとんどは、要求されたデータを取得してフォーマットすることです。これを行うには、SELECT クエリをデータベースに送信し、結果を繰り返し処理し、各行をブラウザに出力し、独自の要件に従って出力する必要があります。
リーリー
出力:
配列 ([0] => 1 [1] => 秋田佳 [2] => 123456 )
3.1 クエリ結果を解析する
クエリが実行され、結果セットが準備されたら、結果の行を解析します。各行のフィールドを取得するには複数の方法を使用できます。フィールドを参照する方法のみが異なるため、選択する方法は主に個人の好みによって決まります。
3.1.1 結果セットをオブジェクトに入れる mysqliのオブジェクト指向構文を使用できるので、結果セットを完全にオブジェクト指向で管理できます。
これは、 fetch_object() メソッドを使用して実行できます。
リーリー
出力:
秋田か
object(stdClass)#3 (3) { ["id"]=> string(1) "1" ["user"]=> string(9) "秋田か" ["psw"]=> string(6) "123456" }
アンディ・ラウ
3.1.2 インデックス付き配列と連想配列を使用する fetch_array(); リーリー
出力:
秋田甲子array(6) { [0]=> string(1) "1" ["id"]=> string(1) "1" => string(9) " " ["user"]=> string(9) "秋田か" [2]=> string(6) "123456" ["psw"]=> string(6) "123456" }
3.1.3 インデックス配列の利用 fetch_row(); リーリー
出力:
123456
3.1.4 連想配列を使用する fetch_assoc(); リーリー
出力:
123456
4 選択された行と影響を受ける行を決定します
多くの場合、SELECTクエリによって返される行数、またはINSERT、UPDATE、またはDELETクエリによって影響を受ける行の数を判断できることが望ましいです。 。
2 つの属性num_rows と affected_rows を使用できます
リーリー
出力:
22
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> ?>