ホームページ >バックエンド開発 >PHPチュートリアル >PHP に移行したばかりです。データベースのクエリ コードを書くのを手伝ってください。

PHP に移行したばかりです。データベースのクエリ コードを書くのを手伝ってください。

WBOY
WBOYオリジナル
2016-06-23 14:28:38850ブラウズ

皆さんこんにちは、php初心者でpdo接続用のデータベース操作クラスを作成したいのですが、phpの呼び出し方が分かりません。アドバイスをお願いします。
クラスファイル coon.php の内容:

<?phpclass my_sql{public $dbh;public $sth;//连接数据库public function sql_open(){     $host='localhost'; //数据库主机名     $dbName='lif2';    //使用的数据库     $user='root';      //数据库连接用户名     $pass='123456';    //对应的密码     $dsn='mysql:host='.$host.';dbname='.$dbName;	 try	 {	$dbh = new PDO($dsn, $user, $pass);	$dbh->query("SET NAMES UTF8");	$dbh->exec("SET NAMES UTF8");	}	catch(Exception $e)    {    echo 'data error: '.$e->getMessage();    }}//关闭数据库连接public function sql_close(){	$dbh=null;}//查询数据库public function my_query($sql){	$this->sql_open();	//$this->sth = $this->dbh->query($sql); 	//$result = $this->sth->fetchAll();               //return $result;            这里面怎么写才能返回数据?	}}?>


ページ呼び出しコード:

<body><?phpinclude 'conn.php';$mysql = new my_sql;foreach ($mysql->my_query('SELECT * FROM user_type order by user_id') as $row){//这里循环输出查询内容}$mysql->sql_close();?></body>


asp または asp.net の関数呼び出しメソッドがまったくわかりません。機能しません。外部から SQL ステートメントを取り込むだけで実行できる、データの挿入、更新、削除を行うための汎用関数を作成したいと考えています。


ディスカッションへの返信(解決策)

1階でご覧ください。神様の答えを待ちましょう!

$this->dbh = new PDO($dsn, $user, $pass);

my_query は正しいようです。コメント行を開きます。まずは試してみてください。

インターネットで多くのコードを読んだ後、テストは何度も失敗しました。その結果、挿入、削除、更新のための一般的なクラスがあるかどうかについてアドバイスをください。これには何か欠点はありますか?パフォーマンスなどに影響するかどうか。次のステップは、SQL インジェクションを防ぐと言われているパラメーター化を研究することです。

conn.php の内容:

<?php//数据库操作类class my_sql{public $user='root';    //数据库连接用户名public $pass='123456';  //对应的密码public $dsn='mysql:host=localhost;dbname=lif2';//查询数据库返回结果public function sql_select($sql){	try	{	$dbh = new PDO($this->dsn, $this->user,$this->pass);	$dbh->query("SET NAMES UTF8");    return $dbh->query($sql); 	$dbh=null;	}	catch(Exception $e)    {    echo 'error: '.$e->getMessage();    }}//操作单条数据(更新/删除/插入),无返回结果public function sql_one($sql){	try	{	$dbh = new PDO($this->dsn, $this->user,$this->pass);	$dbh->exec("SET NAMES UTF8");    $dbh->exec($sql); 	$dbh=null;	}	catch(Exception $e)    {    echo 'error: '.$e->getMessage();    }}//操作多条数据(更新/删除),无返回结果public function sql_more($sql,$str){	try	{	$dbh = new PDO($this->dsn, $this->user,$this->pass);	$dbh->exec("SET NAMES UTF8");	    foreach($str as $arrs)    {	     $dbh->exec($sql.$arrs);     }	$dbh=null;	}	catch(Exception $e)    {    echo 'error: '.$e->getMessage();    }	}}?>

ページ呼び出し機能:
include 'conn.php';$mysql = new my_sql;//操作单挑数据$mysql->sql_one("DELETE FROM `user_type` WHERE `user_id` = ".$_REQUEST['id']."");//读取内容$aa=$mysql->sql_select('SELECT * FROM user_type order by user_id');        foreach ($aa as $row)        {//输出内容echo '<tr>';echo '<td>'.$row['user_id'].'</td><td>'.$row['user_name'].'</td><td>'.$row['user_real_name'].'</td><td>'.$row['user_sex'].'</td><td>'.$row['user_tel'].'</td><td>'.$row['user_qq'].'</td><td>'.$row['user_address'].'</td><td>'.$row['user_email'].'</td><td><a href="?action=del&id='.$row['user_id'].'" title="删除">删除</a></td><td><input name="delAll[]" class="c" type="checkbox" value="'.$row['user_id'].'" /></td>';echo '</tr>';}//操作多条数据$id=$_POST['delAll'];if(isset($id)){$mysql->sql_more("DELETE FROM `user_type` WHERE `user_id` = ",$id);}


上記の操作方法と考え方は、まだ PHP 開発で実用的かどうかはわかりません。誰かが私に指導してくれるかもしれません。

現在のシステムではインジェクションを防ぐことができません。インジェクションを防ぐには PDO::prepare を使用する必要があります


<?php/* Execute a prepared statement by passing an array of values */$sth = $dbh->prepare('SELECT name, colour, calories    FROM fruit    WHERE calories < ? AND colour = ?');$sth->execute(array(150, 'red'));$red = $sth->fetchAll();$sth->execute(array(175, 'yellow'));$yellow = $sth->fetchAll();?>

現在のシステムではインジェクションを防ぐことができません。はい、パラメータ化されたクエリです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。