Как избежать одиночной цитаты - PullRequest
0 голосов
/ 19 мая 2011

Я использую функцию pg_query_params для добавления значений в мою таблицу vmobjects на моей странице addvm.php.

$query = "INSERT INTO vmobjects(guid, ipaddress, username, password, hostid, vmname, guestostype) VALUES($1, $2, $3, $4, $5, $6,

$7)";
        $result = pg_query_params($conn, $query, array($guid, $ip, $username, $password, $hostid, $name, strtolower($os)));

Теперь я использую pg_fetch_array для извлечения строки вмассив.

Я использую этот запрос:

$query = "select vmname, guid, hostid, guestosname from vmobjects";

AddLog("infrastructure.php", "Query: ".$query, ERR_DEBUG_LOW);
$result = pg_query($conn, $query);
$no_records = pg_num_rows($result);
$j = $no_records;
$i = 0;
while($row = pg_fetch_array($result))
{
    if($row[3] == "")
    {
        $vmobj_Array[$i] = $row[0] . '***' . $row[1] . '***' . $row[2];
    }
    else
    {
        $vmobj_Array[$i] = $row[0] . ' ( ' . $row[3] . ' )' . '***' . $row[1] . '***' . $row[2];
    }
    $i++;
}

Но он работает только для простой строки, такой как james, helton, discovere, а не для j'ames, h'elton, d'iscovere.

На самом деле я хочу получить строку в обоих форматах.

Ответы [ 4 ]

2 голосов
/ 20 мая 2011

Как , как кодировать одинарные кавычки , htmlentities($str, ENT_QUOTES); или htmlspecialchars($str, ENT_QUOTES); должны выполнить трюк, где $ str следует заменить переменной или строкой, которую вы хотите экранировать (например, $row[0]),Если вы просто хотите добавить это, все, что вам нужно сделать, это добавить: print "Here's an apostrophe '";

0 голосов
/ 19 мая 2011

Я написал тестовую программу, которая кажется более или менее программой, которая выполняет ключевые функции, описанные выше. Кажется, работает просто отлично. Можете ли вы объяснить, чем ваша программа отличается от этой тестовой программы, или предоставить собственную тестовую программу?

<?php
$conn = pg_connect("host=localhost");
$result = pg_exec($conn,"drop table tvmobjects cascade;");
$result = pg_exec($conn,"create table tvmobjects (guid text not null, ipaddress text not null, username text not null, password text, hostid text not null, vmname text not null, guestostype text, guestosname text);");

function add_user($conn,$guid,$ip,$username,$password,$hostid,$name,$os)
{
  $query = "INSERT INTO tvmobjects(guid,ipaddress,username,password,hostid,vmname,guestostype) VALUES($1, $2, $3, $4, $5, $6, $7)";
  $result = pg_query_params($conn,$query,array($guid,$ip,$username,$password,$hostid,$name,strtolower($os)));
  $no_records=pg_num_rows($result);
  echo "Got $no_records in insert of $username\n";
}

add_user($conn,"james","1.2.3.4","james","semaj", "jamesid", "jamesvm", "jamesostype");
add_user($conn,"j'ames","1.2.3.5","j'ames","semaj", "j'amesid", "j'amesvm", "j'amesostype");

$query= "select vmname,guid,hostid,guestosname from tvmobjects";
$result = pg_query($conn,$query);
$no_records=pg_num_rows($result);
$j=$no_records;
$i=0;
while($row = pg_fetch_array($result))
{
  if ($row[3]=="")
  {
    echo $row[0].'***'.$row[1].'***'.$row[2]."\n";
  }
  else
  {
    echo $row[0].' ( '.$row[3].' )'.'***'.$row[1].'***'.$row[2]."\n";
  }
  $i++;
}
?>

Запуск этого для меня генерирует:

Got 0 in insert of james
Got 0 in insert of j'ames
jamesvm***james***jamesid
j'amesvm***j'ames***j'amesid

Как указывалось ранее, вы не вставляете guestosname при вставке записи, поэтому аналогично выводу, показанному здесь, нет аннотации (guestosname). Но вставка и выбор, кажется, работают как чемпион, поэтому не ясно, что не так.

0 голосов
/ 20 мая 2011

Используйте это:

while($row = pg_fetch_array($result))
{
    if($row[3] == "")
    {

        $vmobj_Array[$i] = htmlentities($row[0], ENT_QUOTES) . "***" . $row[1] . "***" . $row[2];
    }
    else
    {

        $vmobj_Array[$i] = htmlentities($row[0], ENT_QUOTES) . "***" . $row[1] . "***" . $row[2];
    }
    $i++;
}
0 голосов
/ 19 мая 2011

Попробуйте использовать это для извлечения значений, чтобы получить both:

while($row = pg_fetch_array($result, null, PGSQL_BOTH)){

Кроме того, ваши запросы отличаются: в INSERT вы вставляете guestostype, но вы выбираете guestosname в ВЫБОР.Я предполагаю, что ваш запрос просто не возвращает никаких значений, потому что вы запрашиваете несуществующую строку, но проверьте с помощью psql, что все данные находятся в таблице.

...