1

1つは整数でもう1つはjsonの2つのphp変数があり、これらを文字列変数に変換して、postgresqlデータベース内に挿入します。

整数を文字列変数に変換する:

$string1 = (string)$integer;

Facebook APIから文字列変数にjsonを変換します:

$string2 = json_encode($json);

ここで、これら2つの文字列変数をpostgresデータベースに挿入する必要があります。

$query = "INSERT INTO interests VALUES(". $string1 ." ," . $string2 .")"; 
pg_query($con, $query) or die("Cannot execute query: $query\n");

これは機能していません。私は多くの解決策を試しましたが、それでも機能しません。

データベースに挿入するように関数を変更しました

function push_interests(){
$id = $facebook->getUser();
$int = $facebook->api('/me/interests');     
$host = "hostname"; 
$user = "user"; 
$pass = "password"; 
$db = "database"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n"); 


$id = (string)$id;
$int = json_encode($int);

$sql = "INSERT INTO interests VALUES($1,$2)"; 
pg_prepare($con,'my_insert', $sql) or die ("Cannot prepare statement1\n") ;
pg_execute($con,'my_insert', array($id,$int)) or die ("Cannot execute statement1\n");

pg_close($con); 

}

出力は次のとおりです。statement1を実行できません。次のようにデータベースを作成しました。

$query = "DROP TABLE IF EXISTS interests"; 
pg_query($con, $query) or die("Cannot execute query: $query\n");

$query = "CREATE TABLE interests(id VARCHAR(25) PRIMARY KEY, interests VARCHAR(500))";  
pg_query($con, $query) or die("Cannot execute query: $query\n"); 
4

1 に答える 1

4

文字列は単純な引用符で囲む必要があるためです。プリペアドステートメントを使用して、この種の問題を無視し、SQLインジェクションを介してアプリケーションがハッキングされるのを防ぐために、変数が正しくエスケープされるようにすることを強くお勧めします。

$sql = "INSERT INTO interests VALUES ($1, $2)";
$result = pg_prepare($con, 'my_insert', $sql);
$result = pg_execute($con, 'my_insert', array($string1, $string2));

http://php.net/manual/en/function.pg-prepare.phpを参照してください

編集:これが私がテストした実際のコードです:

<?php

$con = pg_connect('')
    or die ("Could not connect to server\n"); 

$id = (string) 5;
$int = json_encode(array('pika' => 'chu', 'plop' => array(1, 2, 3)));

$query = "CREATE TABLE interests(id VARCHAR(25) PRIMARY KEY, interests VARCHAR(500))";
pg_query($query) or die('creating table failed.');

$sql = "INSERT INTO interests (id, interests) VALUES ($1, $2)";
pg_prepare('my_query', $sql);
pg_execute('my_query', array($id, $int)) or die("Error while inserting.");
于 2012-11-08T10:09:53.130 に答える