Отправить php-объект через ajax-вызов [duplicate]

Похоже, что что-то не так с вашей конфигурацией, вот несколько вещей, которые вы можете проверить:

  1. Убедитесь, что PHP установлен и работает правильно. Это может показаться глупым, но вы никогда не знаете. Простой способ проверить - запустить php -v из командной строки и посмотреть, возвращает ли информация о версии или какие-либо ошибки.
  2. Убедитесь, что модуль PHP указан и раскомментирован внутри вашего httpd.conf Apache. должно быть что-то вроде LoadModule php5_module "c:/php/php5apache2_2.dll" в файле. Найдите LoadModule php и убедитесь, что перед ним нет комментария (;).
  3. Убедитесь, что в файле httpd.conf Apache есть PHP MIME-тип. Это должно быть что-то вроде AddType application/x-httpd-php .php. Это говорит Apache, чтобы запустить .php файлы как PHP. Найдите AddType, а затем убедитесь, что есть запись для PHP, и что она раскоментирована.
  4. Убедитесь, что ваш файл имеет расширение .php на нем или любое расширение, указанное в определении MIME в point # 3, иначе он не будет выполняться как PHP.
  5. Убедитесь, что вы не используете короткие теги в файле PHP (), это не включен на всех серверах по умолчанию, и их использование не рекомендуется. Вместо этого используйте (или включить короткие теги в вашем php.ini с short_open_tag=On, если у вас есть код, который их использует).
  6. Убедитесь, что вы обращаетесь к своему файлу через ваш веб-сервер, используя URL-адрес, такой как http://localhost/file.php, не через доступ к локальному файлу file://localhost/www/file.php

И, наконец, проверьте Руководство по PHP для дальнейших советов по настройке .

273
задан Gottlieb Notschnabel 15 November 2014 в 00:36
поделиться

20 ответов

$sth = mysqli_query("SELECT ...");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

Для функции json_encode требуется PHP> = 5.2, а пакет php-json - здесь здесь

ПРИМЕЧАНИЕ : mysql устарел с PHP 5.5.0, используйте расширение mysqli вместо http://php.net/manual/en/migration55.deprecated.php .

454
ответ дан Community 20 August 2018 в 14:25
поделиться
  • 1
    Я бы посоветовал вам упомянуть, что во время запроса select использовать AS для переименования столбцов в нечто для публичного типа, например SELECT blog_title as title, это чище, а публика не знает, какие именно столбцы из базы данных. – RobertPitt 5 February 2011 в 18:04
  • 2
    Этот код ошибочно кодирует все числовые значения в виде строк. Например, числовое поле mySQL, называемое счетом, будет иметь значение JSON "12" вместо 12 (обратите внимание на цитаты). – Theo 25 September 2011 в 19:48
  • 3
    @RobertPitt, безопасность, основанная на сокрытии имен ваших столбцов, - security by obscurity ! – TMS 2 December 2011 в 23:10
  • 4
    @Tomas true, но знание точных имен столбцов значительно упрощает атаки SQL-инъекций – Tim Seguine 2 April 2013 в 14:28
  • 5
    @Tim: Если вы дошли до того, что ваши имена столбцов были известны, это единственный барьер для SQL-инъекции, который вы уже потеряли, нет? – Paolo Bergantino 2 April 2013 в 16:03

Спасибо .. мой ответ:

if ($result->num_rows > 0) {
            # code...
            $arr = [];
            $inc = 0;
            while ($row = $result->fetch_assoc()) {
                # code...
                $jsonArrayObject = (array('lat' => $row["lat"], 'lon' => $row["lon"], 'addr' => $row["address"]));
                $arr[$inc] = $jsonArrayObject;
                $inc++;
            }
            $json_array = json_encode($arr);
            echo $json_array;
        }
        else{
            echo "0 results";
        }
8
ответ дан aashima 20 August 2018 в 14:25
поделиться
$rows = json_decode($mysql_result,true);

так просто: -)

0
ответ дан Anthon 20 August 2018 в 14:25
поделиться
$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');

while($row = mysql_fetch_array($sql_results))
{
    $subArray[location_id]=$row['location'];  //location_id is key and $row['location'] is value which come fron database.
    $subArray[x]=$row['x'];
    $subArray[y]=$row['y'];


 $array[] =  $subArray ;
}
echo'{"ProductsData":'.json_encode($array).'}';
0
ответ дан Bijender Singh Shekhawat 20 August 2018 в 14:25
поделиться

Я решил как это

$stmt->bind_result($cde,$v_off,$em_nm,$q_id,$v_m);
	$list=array();
	$i=0;
	while ($cresult=$stmt->fetch()){	
				
	
		$list[$i][0]=$cde;
		$list[$i][1]=$v_off;
		$list[$i][2]=$em_nm;
		$list[$i][3]=$q_id;
		$list[$i][4]=$v_m;
		$i=$i+1;
	}
	echo json_encode($list);		
Это будет возвращено в ajax в качестве результирующего набора и с помощью json parse в части javascript, как это:

obj = JSON.parse(dataX);

1
ответ дан Bineesh 20 August 2018 в 14:25
поделиться

Попробуйте это, это создаст ваш объект правильно

 $result = mysql_query("SELECT ...");
 $rows = array();
   while($r = mysql_fetch_assoc($result)) {
     $rows['object_name'][] = $r;
   }

 print json_encode($rows);
40
ответ дан ddavtian 20 August 2018 в 14:25
поделиться
  • 1
    +1 Это, кажется, единственный ответ, который предоставляет JSON в том же формате, что и примеры в json.org/example . – ban-geoengineering 16 September 2014 в 15:13
  • 2
    Да, этот пример дает ключ для каждой строки. – Mar 30 June 2017 в 19:48
<?php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','dishant');

$con = mysqli_connect(HOST,USER,PASS,DB);


  if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

 $sql = "select * from demo ";

 $sth = mysqli_query($con,$sql);

$rows = array();

while($r = mysqli_fetch_array($sth,MYSQL_ASSOC)) {

 $row_array['id'] = $r;

    **array_push($rows,$row_array);**
}
echo json_encode($rows);

mysqli_close($con);
?>

aarray_push ($ rows, $ row_array); помогите построить массив, иначе он даст последнее значение в цикле while

, эта работа похожа на метод append StringBuilder в java

2
ответ дан DishantPatel 20 August 2018 в 14:25
поделиться

У меня такое же требование. Я просто хочу напечатать объект результата в формате JSON, поэтому я использую следующий код. Надеюсь, вы что-то нашли.

// Code of Conversion
$query = "SELECT * FROM products;";
$result = mysqli_query($conn , $query);

if ($result) {
echo "</br>"."Results Found";

// Conversion of result object into JSON format
$rows = array();
while($temp = mysqli_fetch_assoc($result)) {
    $rows[] = $temp;
}
echo "</br>" . json_encode($rows);

} else {
    echo "No Results Found";
}
1
ответ дан Dmitry Shvedov 20 August 2018 в 14:25
поделиться

Как создать JSON, используя данные из базы данных MySQL

JSON (Обозначение объекта JavaScript) более предпочтительна в настоящее время по сравнению с XML, поскольку она легка, понятна и легко управляема для обмена данными на разных платформах. мы увидим, как данные JSON могут быть созданы из таблицы Employee, хранящейся в базе данных MySQL.

 echo json_encode($data);

Live: [Пример ]

2
ответ дан indian 20 August 2018 в 14:25
поделиться

Мое простое исправление, чтобы остановить его, помещая речевые метки вокруг числовых значений ...

while($r = mysql_fetch_assoc($rs)){
    while($elm=each($r))
    {
        if(is_numeric($r[$elm["key"]])){
                    $r[$elm["key"]]=intval($r[$elm["key"]]);
        }
    }
    $rows[] = $r;
}   
3
ответ дан James 20 August 2018 в 14:25
поделиться

Ниже приведен код ниже!

<?php

  $con=mysqli_connect("localhost",$username,$password,databaseName);

  // Check connection
  if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  $query = "the query here";

  $result = mysqli_query($con,$query);

  $rows = array();
  while($r = mysqli_fetch_array($result)) {
    $rows[] = $r;
  }
  echo json_encode($rows);

  mysqli_close($con);
?>
6
ответ дан Johan 20 August 2018 в 14:25
поделиться

мы могли бы упростить ответ Паоло Бергантино, как это

$sth = mysql_query("SELECT ...");
print json_encode(mysql_fetch_assoc($sth));
2
ответ дан jrran90 20 August 2018 в 14:25
поделиться

Например, $ result = mysql_query («SELECT * FROM userprofiles, где NAME =« TESTUSER »);

1.), если $ result - только одна строка.

$response = mysql_fetch_array($result);
echo json_encode($response);

2.), если $ result больше одной строки. Вам нужно перебрать строки и сохранить их в массив и вернуть в него json с массивом.

$rows = array();
if (mysql_num_rows($result) > 0) {
    while($r = mysql_fetch_assoc($result)) {
       $id = $r["USERID"];   //a column name (ex.ID) used to get a value of the single row at at time
       $rows[$id] = $r; //save the fetched row and add it to the array.
    }
}    
echo json_encode($rows);
1
ответ дан Jyoti Prakash 20 August 2018 в 14:25
поделиться

Код:

$rows = array();

while($r = mysqli_fetch_array($result,MYSQL_ASSOC)) {

 $row_array['result'] = $r;

  array_push($rows,$row_array); // here we push every iteration to an array otherwise you will get only last iteration value
}

echo json_encode($rows);
1
ответ дан muneebShabbir 20 August 2018 в 14:25
поделиться

Еще одна опция, использующая цикл FOR:

 $sth = mysql_query("SELECT ...");
 for($rows = array(); $row = mysql_fetch_assoc($sth); $rows[] = $row);
 print json_encode($rows);

Единственным недостатком является то, что цикл для более медленного, т.е. в то время как или особенно foreach

1
ответ дан NGix 20 August 2018 в 14:25
поделиться

Вышеупомянутое не будет работать, по моему опыту, до того, как вы назовете корневой элемент в массиве на что-то, до этого я не смог получить доступ к чему-либо в финальном json.

$sth = mysql_query("SELECT ...");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $rows['root_name'] = $r;
}
print json_encode($rows);

Это должно сделать трюк!

Pär

7
ответ дан Pär 20 August 2018 в 14:25
поделиться

http://www.php.net/mysql_query говорит: «mysql_query() возвращает ресурс».

http://www.php.net / json_encode говорит, что он может кодировать любое значение «за исключением ресурса».

Вам нужно выполнить итерацию и собрать результаты базы данных в массиве, затем json_encode массив.

24
ответ дан Rob W 20 August 2018 в 14:25
поделиться

Извините, это очень долго после вопроса, но:

$sql = 'SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]") 
AS json 
FROM users;'
$msl = mysql_query($sql)
print($msl["json"]);

Просто в основном:

"SELECT" Select the rows    
"CONCAT" Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT" Returns a string with concatenated non-NULL value from a group
3
ответ дан Sebass van Boxel 20 August 2018 в 14:25
поделиться

Спасибо, это очень помогло мне. Мой код:

$sqldata = mysql_query("SELECT * FROM `$table`");

$rows = array();
while($r = mysql_fetch_assoc($sqldata)) {
  $rows[] = $r;
}

echo json_encode($rows);
15
ответ дан Tokes 20 August 2018 в 14:25
поделиться
  • 1
    этот, даст нам массив, содержащий; 1) пустую квадратную скобку 2), за которой следует фигурная скобка, содержащая наши возвращенные строки результатов, что это отличается от другого? – gumuruh 21 March 2012 в 08:58

Проверьте код ниже для использования mysql_fetch и json_encode. Вам нужно будет перебирать строки, но если вы используете mysqli, ситуация изменится

$kt_query="SELECT * FROM tbl_xxx";
$kt_result = mysql_query($kt_query) or die('Query failed: ' . mysql_error());
$rows= array();
while($sonuc=mysql_fetch_assoc($kt_result))
{
    $rows[]=$sonuc;
}
print json_encode($rows);
0
ответ дан user3172285 20 August 2018 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: