Drop the callback=?
query part. It is intended for JavaScript callback function.
The working url should be: $yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true";
UPDATE
Working code: (tested on PHP 5.3.27 and 5.4.17)
<?php
function getResultFromYQL() {
$yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true";
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($session);
curl_close($session);
return json_decode($json);
}
var_dump(getResultFromYQL());
?>