• 30-03-2014, 15:43:54
    #1
    arkadaşlar mysql_li kullanırken ekle() fonksiyonumu şu şekilde yazıyordum ve gayette güzel çalışıyordu.

    function ekle($a,$b,$c){
    		mysql_select_db("deneme",mysql_connect("localhost","root"));
    		return $ekle = mysql_query("insert into {$a} ({$b}) values ({$c})");
    }
    bunu PDO'ya çevirmeyi çok denedim ama başaramadım. Nasıl yapabilirim ?
  • 30-03-2014, 15:58:05
    #2
    Üyeliği durduruldu
    Şöyle deneyin.

    $db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'kullanıcıadı', 'parola');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    
    $db->exec("INSERT INTO `tablo_adi` (`column1`, `column2`, ...) VALUES ('value1', 'value2', ...)");
  • 30-03-2014, 16:03:35
    #3
    Üyeliği durduruldu
    Makarna kod yazmayın diye boşa demiyoruz OOP'a geçir insert sorgusu yaz böyle makarna takılma sonra daha çok uğraşacaksın
  • 30-03-2014, 16:13:55
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    mka688 adlı üyeden alıntı: mesajı görüntüle
    Makarna kod yazmayın diye boşa demiyoruz OOP'a geçir insert sorgusu yaz böyle makarna takılma sonra daha çok uğraşacaksın
    OOP'a başlamayı düşünüyorum bende,OOP'un kolaylığı ve farkı nedir?
  • 30-03-2014, 16:15:44
    #5
    exec yada query fonksiyon yazsam dediğiniz olurdu fakat sql injection için prepare ve execute kullanıyorum..
  • 30-03-2014, 16:37:02
    #6
    Üyeliği durduruldu
    http://de3.php.net/pdo.prepared-statements
    Şu fonk. işinizi görür sanırım
    $stmt = $db->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':value', $value);
    
    // insert one row
    $name = 'one';
    $value = 1;
    $stmt->execute();
    
    // insert another row with different values
    $name = 'two';
    $value = 2;
    $stmt->execute();
  • 30-03-2014, 16:49:57
    #7
        /**
         * ekle                         veritabanına veri ekleme metodu
         * @param string $tablo         verinin ekleneceği tablo adı 
         * @param array $veri           eklenecek veriler ve keyleri. örn: array("baslik" => "başlık", "icerik" => "veri içeriği");
         * @param integer $son_id       eklenen verinin id'si isteniyorsa 1 yazılmalı.
         * @return integer              $son_id 1 olarak gelmişse, eklenen verinin id değerini geri döndürüyoruz.
         */
        public function ekle($tablo, $veri = array(), $son_id = null){
            //tablo ve veri gelmemişse false döndürüyoruz
            if(empty($tablo) or empty($veri)){ return false; }
    
            //tablo isimlerini birleştiriyoruz
            $tablolar = implode(", ", array_keys($veri));
    
            //veri keylerini birleştiriyoruz
            $veriler  = ":" .implode(", :", array_keys($veri));
    
            //sorguyu hazırlıyoruz
            $sorgu = $this->prepare("INSERT INTO $tablo ($tablolar) VALUES ($veriler)");
    
            //verileri ve keyleri bing'lere atıyoruz
            foreach($veri as $ad => $bilgi){		
                $sorgu->bindValue(":$ad", $bilgi);
            }
    
            //sorguyu çalıştırıyoruz
            $sorgu->execute();
    
            //eklenen verinin id değeri istenmişse, geri döndürüyoruz
            if($son_id == 1){
                return $this->lastInsertId();
            }
        }
  • 30-03-2014, 17:15:10
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Misafir; şöyle de bi' uyarlama yapabiliriz;

    <?php
    	
    	define("DB_HOST", "127.0.0.1");
    	
    	define("DB_PORT", "3306");
    	
    	define("DB_NAME", "test");
    	
    	define("DB_USER", "root");
    	
    	define("DB_PASS", "root");
    	
    	function insert(PDO $instance, $table, array $columns, array $parameters)
    	{
    		if(empty($columns) || empty($parameters))
    		{
    			return false;
    		}
    		
    		if(count($columns) != count($parameters))
    		{
    			return false;
    		}
    		
    		$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    		
    		$query_string = "INSERT INTO `{$table}` SET ";
    		
    		foreach($columns as $index => $column)
    		{
    			$query_string .= "`{$column}` = :{$column}, ";
    		}
    		
    		$query_string = trim(trim($query_string), ",");
    		
    		$statement = $instance->prepare($query_string);
    		
    		foreach($columns as $index => $column)
    		{
    			$parameter = $parameters[$index];
    			$parameter_type = gettype($parameter);
    			
    			switch(strtolower($parameter_type))
    			{
    				case "null":
    				{
    					$statement->bindParam(":{$column}", $parameter, PDO::PARAM_NULL);
    				} break;
    				case "integer":
    				{
    					$statement->bindParam(":{$column}", $parameter, PDO::PARAM_STR);
    				} break;
    				case "string":
    				{
    					$statement->bindParam(":{$column}", $parameter, PDO::PARAM_STR);
    				} break;
    				default:
    				{
    					$statement->bindParam(":{$column}", $parameter);
    				}
    			}
    		}
    		
    		try
    		{
    			$response = $statement->execute();
    			
    			return $response;
    		}
    		catch(PDOException $e)
    		{
    			return $e->getMessage();
    		}
    	}
    	
    	try
    	{
    		$instance = new PDO(sprintf("mysql:host=%s;port=%s;dbname=%s", DB_HOST, DB_PORT, DB_NAME), DB_USER, DB_PASS);
    		
    		$response = insert($instance, "events", array("ID", "name"), array(null, "PDO"));
    		
    		echo $instance->lastInsertId();
    	}
    	catch(PDOException $e)
    	{
    		exit($e->getMessage());
    	}