2014-01-26 2 views
0

У меня проблема с удалением строк, используя следующий код. Таблица отображает информацию правильно, плюс отправляет правильный идентификатор в url на страницу delete.php, но я не могу заставить его выполнить команду. Немного изменив код на delete.php, я могу его показать:Проблема удаления строк из отображаемой таблицы

Не удалось удалить индекс.

или:

Связующие параметры не удалось: 0

<?php 
$con = mysqli_connect("localhost","user","pass","database"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
    die("Failed to connect to MySQL: " . mysqli_connect_error()); 
} 

if (!$result = mysqli_query($con,"SELECT * FROM mytable ORDER BY `server_name`;")) 
{ 
    die("Error: " . mysqli_error($con)); 
} 
?> 
<table border='1'> 
<tr> 
<th><b>Server Name</b></th> 
<th><center><b>Port</b></center></th> 
<th><center><b>Mod</b></center></th> 
</tr> 
<?php 
while($row = mysqli_fetch_array($result)) 
{ 
?> 
<tr> 
<td><?php echo $row['server_name']; ?></td> 
<td><center><?php echo $row['server_port']; ?></center></td> 
<td><center><?php echo $row['mod']; ?></center></td> 
<td><center><a href="delete.php?id=<?php echo $row['index']; ?>"><img src="images/remove.png" width="16" height="16"></center></img></a></td> 
</tr> 
<?php 
} 
mysqli_close($con); 
?> 
</table> 

Мой удаления файла

<?php 
// Your database info 
$db_host = 'localhost'; 
$db_user = 'user'; 
$db_pass = 'pass'; 
$db_name = 'database'; 

if (!isset($_GET['id'])) 
{ 
    echo 'No ID was given...'; 
    exit; 
} 

$con = new mysqli($db_host, $db_user, $db_pass, $db_name); 
if ($con->connect_error) 
{ 
    die('Connect Error (' . $con->connect_errno . ') ' . $con->connect_error); 
} 

$sql = "DELETE FROM mytable WHERE 'index' = " . $_GET['id']; 
if (!$result = $con->prepare($sql)) 
{ 
    die('Query failed: (' . $con->errno . ') ' . $con->error); 
} 

if (!$result->bind_param('i', $_GET['ID'])) 
{ 
    die('Binding parameters failed: (' . $result->errno . ') ' . $result->error); 
} 

if (!$result->execute()) 
{ 
    die('Execute failed: (' . $result->errno . ') ' . $result->error); 
} 

if ($result->affected_rows > 0) 
{ 
    echo "The ID was deleted with success."; 
} 
else 
{ 
    echo "Couldn't delete the index."; 
} 
$result->close(); 
$con->close(); 

Это должно быть что-то простое, но я не могу понять вне.

+0

Почему вы используете конкатенацию строк, когда используете подготовленный оператор, вместо использования параметра '?'? – Barmar

ответ

1

Вы используете неправильный тип котировок в своем SQL. Чтобы избежать имени таблицы или столбца, которое содержит зарезервированное слово, вы используете обратные ссылки. И если вы используете bind_param, вам нужно поставить ? в запрос, где параметр будет заменен.

$sql = "DELETE FROM mytable WHERE `index` = ?"; 
+0

Ничего себе, ребята, это было быстро и просто! На самом деле, у меня было? », Но когда это не сработает, я начал менять вещи и сбивать себя с толку. То, что у меня не было в то время, было« индексом вокруг ».. добавив их позже, но переходя от?» .. большое спасибо! – user3236628

0

Замените следующую строку в файл delete.php:

$sql = "DELETE FROM mytable WHERE 'index' = " . $_GET['id']; 

с:

$sql = "DELETE FROM mytable WHERE `index` = ?"; 

Изменения в предлагаемой замены заявления включают в себя:

  1. Заменить одинарные кавычки имя столбца index с обратными отсчетами. Обратите внимание, что символ escape-кода MySQL - это не одинарные кавычки.
  2. Вы не включаете какие-либо метки параметров в свой запрос delete, но в дальнейшем вы пытаетесь связать целочисленный параметр.
+0

Спасибо Vee! Я дал правильный ответ Бармару, поскольку он был только быстрее, чем ты, но у тебя также был правильный ответ! Спасибо друг. – user3236628

Смежные вопросы