sql >> データベース >  >> RDS >> Mysql

mysql_real_escape_stringを呼び出すたびに、データベースにもう一度アクセスする必要がありますか?

    mysqlライブラリを使用しているという事実はありません サーバーとの往復を行うことを意味します。

    mysqlクライアントライブラリからコードを実行し、phpインタープリターと同じプロセスでロードします。ただし、接続は必要です。その関数は、正しく動作するためにいくつかのサーバー設定を知っている必要があります。ただし、これらの設定はPHP側の接続情報にキャッシュされます。

    これを確認したい場合(そしてLinuxを使用している場合)、次のような簡単なスクリプトを記述します。

    <?php
    $link = mysql_connect('localhost', 'user', 'pass');
    echo "Connection done\n";
    echo mysql_real_escape_string("this ' is a test");
    ?>
    

    そして、straceを実行します :

    $ strace php t.php
    ....            # here comes the connection to mysql, socket fd == 3
    connect(3, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = 0
    fcntl(3, F_SETFL, O_RDWR)               = 0
    setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
    ....            # talking with mysql here
    poll([{fd=3, events=POLLIN}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
    read(3, "8\0\0\0\n5.1.58-log\0\3\0\0\0K-?4'fL+\0\377\367!"..., 16384) = 60
    ...
    read(3, "\7\0\0\2\0\0\0\2\0\0\0", 16384) = 11
                    # first php echo
    write(1, "Connection done\n", 16Connection done    )       = 16
                    # second php echo
    write(1, "this \\' is a test", 17this \' is a test)      = 17
    munmap(0x7f62e187a000, 528384)          = 0
    ....
    

    唯一重要なことは、2つのwriteechoが原因 ステートメントの間に他のシステムコールはありません-システムコールなしではネットワーク通信は不可能です(とにかくLinuxのユーザースペースから)。




    1. 実行したばかりのmysqlステートメントを元に戻すにはどうすればよいですか?

    2. oci_bind_by_nameおよびto_datePHP/ OCI / Oracle

    3. Kubeadmを使用してKubernetesをインストールする方法

    4. クラウドでのPostgreSQLの負荷分散が簡単に