2010-12-02 28 views
8

Estoy en mi ingenio final en lo que debería ser el valor del parámetro de consultas. Así que para sumbit una multiquery a través de la biblioteca gráfica API, el siguiente sería el método de código para llevarlo a cabo, por lo que puedo decir.Facebook Nuevo PHP SDK para Graph API - Consulta múltiple

$param = array(
'method' => 'fql.multiquery', 
'queries' => $multiQuery, 
'callback' => ''); 
$queryresults = $facebook->api($param); 

Al utilizar este método en la nueva biblioteca PHP SDK de Facebook, ¿alguien ha hecho esto? Si es así, ¿puede dar un ejemplo de cómo se genera el valor completo de la variable $multiQuery?

He estado luchando con esto durante unos días y solo estoy encontrando ejemplos con la antigua biblioteca de PHP.

Respuesta

2

¿Por qué siempre después de golpearse la cabeza por días, hace una pregunta, y 5 minutos más tarde, se le ocurre la respuesta usted mismo.

Así que aquí estaba MI hermosa experiencia.

Dado que en PHP puede utilizar un carácter "/' para iniciar una cadena de texto, me quedé atrapado en el flip flopping del carácter de comillas dobles y comillas simples. Me di cuenta de que las consultas definidas en una consulta múltiple son, duh, envueltas por comillas dobles.

¿Lección aprendida? Si tiene una cláusula where que utiliza un valor de cadena en una consulta múltiple, asegúrese de que, por el bien de todos, use COTIZACIONES INDIVIDUALES alrededor del valor de cadena en el que se filtra.

MALO MALO - Esto es lo que hice. tenga en cuenta las comillas dobles alrededor de myvalue y myothervalue. ¡TRAVIESO!

$multiQuery = { 
    "query1":"select something from something where somecolumn = "myvalue"", 
    "query2":"select something from something where somecolumn = "myothervalue"" 
    }; 

buen ejemplo - Ahora mira mivalor y myothervalue.

$multiQuery = { 
    "query1":"select something from something where somecolumn = 'myvalue'", 
    "query2":"select something from something where somecolumn = 'myothervalue'" 
    }; 

Así que ahora yo puedo ...

$multiQuery = { 
     "query1":"select something from something where somecolumn = 'myvalue'", 
     "query2":"select something from something where somecolumn = 'myothervalue'" 
     }; 

$param = array(  
    'method' => 'fql.multiquery',  
    'queries' => $multiQuery,  
    'callback' => '');  
$queryresults = $facebook->api($param); 

y si alguno de ustedes se preguntan cuál es el tipo real de la variable $multiQuery es (para los recién iniciados como yo), que es sólo una cadena de datos tipo. No es una matriz, nada más ingenioso que el texto.

+1

Por favor, coloque comillas simples en torno al valor de $ multiquery. '$ multiquery = '{ " query1 ":" selecciona algo de algo donde somecolumn = \' myvalue \ '", " query2 ":" selecciona algo de algo donde somecolumn = \' myothervalue \ '" }'; ' – qasimzee

+0

sintaxis incorrecta. reemplazar con [, ] –

1

Teniendo en cuenta una serie de identificadores de nodos con sus respectivas de url como valores tendrá

/** 
*A JSON-encoded dictionary of the queries to perform. The array contains a set of key/value pairs. 
*Each key is a query name, which can contain only alphanumeric characters and optional underscores. 
*Each key maps to a value containing a traditional FQL query. 
*/ 
$fql = '{'; 
foreach ($path as $key1 => $value1) { 
    $fql .= '"' . $key1 . '":"SELECT share_count, like_count, comment_count, total_count FROM link_stat WHERE url=\'' . $value1 . '\'",'; 
} 

$fql .= '}'; 

$param = array(
    'method' => 'fql.multiquery', 
    'queries' => $fql, 
    'callback' => '' 
); 
try { 
    $fqlresult = $facebook->api($param); 
} catch (FacebookApiException $e) { 
    watchdog('Facebook Query', 'Parsing error on node @node | @error', array('@node' => $key1, '@error' => $e), WATCHDOG_DEBUG); } 
0

Puede probar esto:

$multiQuery= array ("query1" => "query #1 goes here","query2" => "query #2 goes here"); 

$param = array(
'method' => 'fql.multiquery', 
'queries' => $multiQuery, 
'callback' => ''); 

$queryresults = $facebook->api($param); 
Cuestiones relacionadas