<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 使用 Perl 進行 MySQL 查詢 > 原文: [http://zetcode.com/db/mysqlperl/queries/](http://zetcode.com/db/mysqlperl/queries/) 我們已經建立了到數據庫的連接。 現在我們要修改并從數據庫中獲取數據。 使用`SELECT`語句從數據庫中檢索數據。 在 Perl DBI 中,首先我們使用`prepare()`方法準備 SQL 語句。 SQL 字符串被發送到數據庫引擎,該引擎檢查語句的有效性,語法,并在某些數據庫中檢查執行某些查詢的用戶權限。 如果一切正常,則對語句句柄的引用將返回到 Perl 腳本。 下一步是對`execute()`方法的調用。 該方法在數據庫內執行查詢。 此時,結果保留在數據庫中。 Perl 腳本尚不包含數據。 對于非選擇語句,`execute()`方法返回已知的受影響的行數。 在最后一步中,從數據庫中獲取數據。 數據被逐行提取并填充到 Perl 數據結構中。 Perl DBI 有幾種從數據庫表中獲取數據的方法。 | 方法 | 描述 | | --- | --- | | `fetchrow_arrayref()` | 獲取下一行數據并返回對數組的引用。 | | `fetchrow_array()` | 獲取下一行數據,并將其作為列表返回。 | | `fetchrow_hashref()` | 獲取下一行數據,并將其返回為對哈希的引用。 | | `fetchall_arrayref()` | 提取所有數據&返回對每行有一個引用的數組的引用。 | | `fetch()` | 該方法是`fetchrow_arrayref()`的別名。 | | `fetchrow()` | 該方法是`fetchrow_array()`的別名。 | 準備并執行完 SQL 語句后,我們調用可用的訪存方法之一。 | 方法 | 描述 | | --- | --- | | `selectrow_arrayref()` | 將`prepare()`,`execute()`和`fetchrow_arrayref()`合并為一個調用。 | | `selectrow_hashref()` | `Combines prepare()`,`execute()`和`fetchrow_hashref()`進入一個通話。 | | `selectrow_array()` | 將`prepare()`,`execute()`和`fetchrow_array()`合并為一個調用。 | | `selectall_arrayref()` | 將`prepare()`,`execute()`和`fetchall_arrayref()`合并為一個調用。 | | `selectall_hashref()` | `Combines prepare()`,`execute()`和`fetchall_hashref()`進入一個通話。 | | `selectcol_arrayref()` | 合并`prepare()`和`execute()`并從所有行中提取一個`col`到單個調用中。 | 在第二張表中,我們列出了工具方法,這些方法將三個方法組合為一個調用。 它們是方便的方法。 ## 提取方法 在第一個示例中,我們將演示`fetchrow_arrayref()`方法的用法。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->prepare("SELECT * FROM Cars LIMIT 5"); $sth->execute(); my $row; while ($row = $sth->fetchrow_arrayref()) { print "@$row[0] @$row[1] @$row[2]\n"; } $sth->finish(); $dbh->disconnect(); ``` 在示例中,我們從`Cars`表中選擇 5 行。 使用`fetchrow_arrayref()`方法檢索數據。 ```perl my $sth = $dbh->prepare("SELECT * FROM Cars LIMIT 5"); $sth->execute(); ``` 這是數據檢索過程的前兩個階段。 我們準備并執行`SELECT`語句。 ```perl my $row; while ($row = $sth->fetchrow_arrayref()) { print "@$row[0] @$row[1] @$row[2]\n"; } ``` 現在,我們正在獲取數據。 `fetchrow_arrayref()`方法獲取下一行數據,并返回對包含字段值的數組的引用。 當沒有更多的行了時,我們將方法放入終止的`while`循環中。 ```perl $ ./fetchrow_arrayref.pl 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 ``` 示例輸出。 在第二個示例中,我們將使用`fetchrow_array()`方法。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->prepare( "SELECT * FROM Cars LIMIT 5" ); $sth->execute(); my @row; while (@row = $sth->fetchrow_array()) { print "@row\n"; } $sth->finish(); $dbh->disconnect(); ``` 在此腳本中,我們連接到數據庫,并使用`fetchrow_array()`方法一張一張地獲取 5 行`Cars`表。 ```perl my @row; while (@row = $sth->fetchrow_array()) { print "@row\n"; } ``` `fetchrow_array()`方法獲取下一行數據,并將其作為包含字段值的列表返回。 我們使用`while`循環遍歷所有 5 行。 在下一個示例中,我們將按列名稱獲取數據。 為此,我們將使用`fetchrow_hashref()`方法。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->prepare( "SELECT * FROM Cars LIMIT 5" ); $sth->execute(); my $row; while($row = $sth->fetchrow_hashref()) { print "$row->{Id} $row->{Name} $row->{Price}\n"; } $sth->finish(); $dbh->disconnect(); ``` 在示例中,數據以對 Perl 哈希的引用形式返回。 ```perl my $row; while($row = $sth->fetchrow_hashref()) { print "$row->{Id} $row->{Name} $row->{Price}\n"; } ``` `fetchrow_hashref()`方法獲取下一行數據,并將其返回為對包含字段名稱和字段值對的哈希的引用。 使用此方法,我們可以按列名稱檢索值。 在本節的最后一個示例中,我們一步一步從`SELECT`語句中獲取所有數據。 我們使用`fetchall_arrayref()`方法。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->prepare("SELECT * FROM Cars LIMIT 5"); $sth->execute(); my $all = $sth->fetchall_arrayref(); foreach my $row (@$all) { my ($id, $name, $price) = @$row; print "$id $name $price\n"; } $sth->finish(); $dbh->disconnect(); ``` 該示例從`Cars`表中選擇并打印五行。 ```perl my $all = $sth->fetchall_arrayref(); ``` 我們通過一個方法調用獲取所有數據。 `fetchall_arrayref()`方法返回對數組的引用,該數組每行包含一個引用。 ```perl foreach my $row (@$all) { my ($id, $name, $price) = @$row; print "$id $name $price\n"; } ``` 我們使用`foreach`循環遍歷檢索到的數據。 ## 轉儲數據 Perl DBI 有一個稱為`dump_results()`的特殊方法。 此方法被設計為用于原型設計和測試查詢的便捷工具。 它使用`neat_list()`方法格式化和編輯字符串以供人類閱讀。 不建議將其用于數據傳輸應用。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->prepare( "SELECT * FROM Cars LIMIT 5" ); $sth->execute(); $sth->dump_results(); $sth->finish(); $dbh->disconnect(); ``` 在示例中,我們將轉儲結果集中的所有數據。 ```perl my $sth = $dbh->prepare( "SELECT * FROM Cars LIMIT 5" ); $sth->execute(); ``` SQL 語句從`Cars`表中選擇五行。 和所有三列。 ```perl $sth->dump_results(); ``` `dump_results()`從語句句柄中選擇所有行并進行打印。 這是用于原型制作和測試的方法。 ```perl $ ./dump.pl 1, 'Audi', 52642 2, 'Mercedes', 57127 3, 'Skoda', 9000 4, 'Volvo', 29000 5, 'Bentley', 350000 5 rows ``` 這是示例的輸出。 ## 便利方法 我們將展示兩個使用上述便利方法的示例。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $ary = $dbh->selectrow_arrayref("SELECT * FROM Cars WHERE Id = 5"); print join(" ", @$ary), "\n"; $dbh->disconnect(); ``` 在第一個代碼示例中,我們將調用`selectrow_arrayref()`方法。 我們從`Cars`表中選擇第五行。 ```perl my $ary = $dbh->selectrow_arrayref("SELECT * FROM Cars WHERE Id = 5"); ``` `selectrow_arrayref()`方法將`prepare()`,`execute()`和`fetchrow_arrayref()`合并為一個調用。 它返回對語句第一行數據的引用。 請注意,我們不使用語句句柄。 我們使用`$dbh`數據庫句柄對象。 ```perl print join(" ", @$ary), "\n"; ``` 我們將行打印到控制臺。 下面的示例顯示`selectall_arrayref()`方法。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $all = $dbh->selectall_arrayref("SELECT * FROM Cars LIMIT 5"); foreach my $row (@$all) { my ($id, $name, $price) = @$row; print "$id $name $price\n"; } $dbh->disconnect(); ``` 我們再次從`Cars`表中檢索 5 行。 ```perl my $all = $dbh->selectall_arrayref("SELECT * FROM Cars LIMIT 5"); ``` `selectall_arrayref()`方法返回對數組的引用,其中包含對獲取的每一行數據的數組的引用。 提供的 SQL 語句從`Cars`表中選擇 5 行。 注意,我們既沒有調用`prepare()`也沒有調用`execute()`方法。 這是因為`selectall_arrayref()`方法將`prepare()`,`execute()`和`fetchall_arrayref()`組合到一個調用中。 ```perl foreach my $row (@$all) { my ($id, $name, $price) = @$row; print "$id $name $price\n"; } ``` 我們遍歷提取的數組數組并將數據打印到終端。 ```perl $ ./selectall_arrayref.pl 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 ``` 這是示例的輸出。 ## 參數化查詢 現在,我們將關注參數化查詢。 當使用參數化查詢時,我們使用占位符,而不是直接將值寫入語句。 參數化查詢可提高安全性和性能。 當程序收到用戶的輸入時,程序員必須始終保持謹慎。 稍后,我們將值綁定到預備語句,而不是從用戶輸入構建字符串。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $id = 3; my $sth = $dbh->prepare( "SELECT * FROM Cars WHERE Id = ?" ); $sth->execute($id); my $ret = $sth->fetch(); foreach my $row (@$ret) { print "$row "; } print "\n"; $sth->finish(); $dbh->disconnect(); ``` 在代碼示例中,我們從表中選擇特定的行。 SQL 語句具有一個占位符,稍后將在代碼中填充該占位符。 ```perl my $id = 3; ``` 這可能是用戶的輸入。 ```perl my $sth = $dbh->prepare( "SELECT * FROM Cars WHERE Id = ?" ); ``` 問號`?`是值的占位符。 該值稍后添加。 ```perl $sth->execute($id); ``` `execute()`語句采用一個參數,該參數綁定到占位符。 ```perl $ ./parameterized.pl 3 Skoda 9000 ``` 我們已經使用參數化查詢從`Cars`表中檢索了一行。 在第二個示例中,我們將使用便利選擇方法之一使用參數化查詢。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $id = 2; my @ary = $dbh->selectrow_array("SELECT * FROM Cars WHERE Id = ?", undef, $id); print join(" ", @ary), "\n"; $dbh->disconnect(); ``` 我們需要在`SELECT`查詢中填充一個占位符。 ```perl my @ary = $dbh->selectrow_array("SELECT * FROM Cars WHERE Id = ?", undef, $id); ``` `selectrow_array()`方法的第三個參數采用占位符的值。 在 MySQL Perl 教程的這一部分中,我們演示了如何使用各種 Perl DBI 方法從數據庫中獲取數據。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看